From: Patrik Flykt <[email protected]>

Change password query to use RequestInput method call instead of
RequestPassphrase. The supplied passphrase_cb_t function sets the password
returned via Agent API and tries to reconnect to the service.

A connman_service_set_passphrase helper function has been added by factoring
out the password setting code from set_property.
---
 src/service.c |   48 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/src/service.c b/src/service.c
index b22edb1..ca694f1 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1377,6 +1377,22 @@ const char *connman_service_get_proxy_autoconfig(struct 
connman_service *service
        return __connman_ipconfig_get_proxy_autoconfig(service->ipconfig);
 }
 
+static void connman_service_set_passphrase(struct connman_service *service,
+                                       const char* passphrase)
+{
+       g_free(service->passphrase);
+       service->passphrase = g_strdup(passphrase);
+
+       passphrase_changed(service);
+
+       if (service->network != NULL)
+               connman_network_set_string(service->network,
+                                       "WiFi.Passphrase",
+                                       service->passphrase);
+
+       __connman_storage_save_service(service);
+}
+
 static DBusMessage *get_properties(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
 {
@@ -1448,16 +1464,7 @@ static DBusMessage *set_property(DBusConnection *conn,
 
                dbus_message_iter_get_basic(&value, &passphrase);
 
-               g_free(service->passphrase);
-               service->passphrase = g_strdup(passphrase);
-
-               passphrase_changed(service);
-
-               if (service->network != NULL)
-                       connman_network_set_string(service->network,
-                               "WiFi.Passphrase", service->passphrase);
-
-               __connman_storage_save_service(service);
+               connman_service_set_passphrase(service, passphrase);
        } else if (g_str_equal(name, "APN") == TRUE) {
                const char *apn;
 
@@ -1855,6 +1862,17 @@ static connman_bool_t get_reconnect_state(struct 
connman_service *service)
        return __connman_device_get_reconnect(device);
 }
 
+static void request_input_cb (struct connman_service *service,
+                       const char *passphrase, void *user_data)
+{
+       DBG ("RequestInput return, %p", service);
+
+       if (passphrase == NULL)
+               return;
+       connman_service_set_passphrase(service, passphrase);
+       __connman_service_connect(service);
+}
+
 struct connman_service *
 __connman_service_connect_type(enum connman_service_type type)
 {
@@ -1904,8 +1922,9 @@ __connman_service_connect_type(enum connman_service_type 
type)
        err = __connman_service_connect(service);
        if (err < 0) {
                if (err == -ENOKEY)
-                       if (__connman_agent_request_passphrase(service,
-                                                               NULL, NULL))
+                       if ( __connman_agent_request_input(service,
+                                                       request_input_cb,
+                                                       NULL))
                                return service;
 
                if (err != -EINPROGRESS)
@@ -1950,8 +1969,9 @@ static DBusMessage *connect_service(DBusConnection *conn,
        err = __connman_service_connect(service);
        if (err < 0) {
                if (err == -ENOKEY) {
-                       if (__connman_agent_request_passphrase(service,
-                                                       NULL, NULL) == 0)
+                       if (__connman_agent_request_input(service,
+                                                       request_input_cb,
+                                                       NULL) == 0)
                                return NULL;
                }
 
-- 
1.7.1

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to