diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2012-06-15 16:00:21 +0300 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-06-18 10:57:08 +0300 |
commit | fc41a18566f0bb753fd8ce35873d1442942f464c (patch) | |
tree | f198bceea5eac8f186f15fd13eae23b9c1e13b11 /src/network.c | |
parent | 3ca789e446848eed6ca3c00af080cd737d115dcb (diff) | |
download | connman-fc41a18566f0bb753fd8ce35873d1442942f464c.tar.gz connman-fc41a18566f0bb753fd8ce35873d1442942f464c.tar.bz2 connman-fc41a18566f0bb753fd8ce35873d1442942f464c.zip |
service: Connecting hidden network waits until connected
If the user is connecting to hidden network, then we delay the
return of the reply to caller until the real service has connected.
This way the user connect to hidden and non-hidden networks works
the same way from caller point of view.
Diffstat (limited to 'src/network.c')
-rw-r--r-- | src/network.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/network.c b/src/network.c index 6fe1d9c5..bf017676 100644 --- a/src/network.c +++ b/src/network.c @@ -1455,17 +1455,36 @@ connman_bool_t connman_network_get_associating(struct connman_network *network) return network->associating; } +void connman_network_clear_hidden(void *user_data) +{ + if (user_data == NULL) + return; + + DBG("user_data %p", user_data); + + /* + * Hidden service does not have a connect timeout so + * we do not need to remove it. We can just return + * error to the caller telling that we could not find + * any network that we could connect to. + */ + __connman_service_reply_dbus_pending(user_data, EIO); +} + int connman_network_connect_hidden(struct connman_network *network, - char *identity, char* passphrase) + char *identity, char* passphrase, void *user_data) { int err = 0; struct connman_service *service; - DBG(""); - service = __connman_service_lookup_from_network(network); - if (service == NULL) - return -EINVAL; + + DBG("network %p service %p user_data %p", network, service, user_data); + + if (service == NULL) { + err = -EINVAL; + goto out; + } if (identity != NULL) __connman_service_set_agent_identity(service, identity); @@ -1476,12 +1495,17 @@ int connman_network_connect_hidden(struct connman_network *network, if (err == -ENOKEY) { __connman_service_indicate_error(service, CONNMAN_SERVICE_ERROR_INVALID_KEY); - return err; + goto out; } else { __connman_service_set_hidden(service); __connman_service_set_userconnect(service, TRUE); + __connman_service_set_hidden_data(service, user_data); return __connman_service_connect(service); } + +out: + __connman_service_return_error(service, -err, user_data); + return err; } /** |