X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fservice.c;h=72f5af4c54a6c123145dc11af0cc6590916299ef;hb=0bfab55f1a737afedaffeff652fc3e75ee80f2b4;hp=a3a0160a07b51adf11716b1f121d5000842ddd9f;hpb=3ca789e446848eed6ca3c00af080cd737d115dcb;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/service.c b/src/service.c index a3a0160..72f5af4 100644 --- a/src/service.c +++ b/src/service.c @@ -4631,15 +4631,27 @@ static void request_input_cb (struct connman_service *service, if (g_strcmp0(error, "net.connman.Agent.Error.Canceled") == 0) { err = -EINVAL; + + if (service->hidden == TRUE) + __connman_service_return_error(service, + ECANCELED, user_data); goto done; + } else { + if (service->hidden == TRUE) + __connman_service_return_error(service, + ETIMEDOUT, user_data); } } if (service->hidden == TRUE && name_len > 0 && name_len <= 32) { device = connman_network_get_device(service->network); - __connman_device_request_hidden_scan(device, + err = __connman_device_request_hidden_scan(device, name, name_len, - identity, passphrase); + identity, passphrase, + user_data); + if (err < 0) + __connman_service_return_error(service, -err, + user_data); } if (values_received == FALSE || service->hidden == TRUE) { @@ -4682,6 +4694,17 @@ static void request_input_cb (struct connman_service *service, * when failing is due to wrong user input */ service->state = CONNMAN_SERVICE_STATE_IDLE; + if (service->hidden == FALSE) { + /* + * If there was a real error when requesting + * hidden scan, then that error is returned already + * to the user somewhere above so do not try to + * do this again. + */ + __connman_service_return_error(service, -err, + user_data); + } + service_complete(service); __connman_connection_update_gateway(); } @@ -5443,8 +5466,25 @@ int __connman_service_connect(struct connman_service *service) if (service->userconnect == TRUE) { if (err == -ENOKEY || err == -EPERM) { - return __connman_agent_request_passphrase_input(service, - request_input_cb, NULL); + DBusMessage *pending = NULL; + + /* + * We steal the reply here. The idea is that the + * connecting client will see the connection status + * after the real hidden network is connected or + * connection failed. + */ + if (service->hidden == TRUE) { + pending = service->pending; + service->pending = NULL; + } + + err = __connman_agent_request_passphrase_input(service, + request_input_cb, pending); + if (service->hidden == TRUE && err != -EINPROGRESS) + service->pending = pending; + + return err; } reply_pending(service, -err); }