service: Remember provider pending dbus message
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Tue, 14 Aug 2012 14:05:34 +0000 (17:05 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Wed, 15 Aug 2012 10:49:46 +0000 (13:49 +0300)
The provider connect dbus reply message is stored in service
until provider is connected.

src/connman.h
src/service.c

index 89fe7db..305f09f 100644 (file)
@@ -625,6 +625,9 @@ int __connman_service_disconnect(struct connman_service *service);
 int __connman_service_disconnect_all(void);
 void __connman_service_auto_connect(void);
 gboolean __connman_service_remove(struct connman_service *service);
+connman_bool_t __connman_service_is_provider_pending(struct connman_service *service);
+void __connman_service_set_provider_pending(struct connman_service *service,
+                                                       DBusMessage *msg);
 void __connman_service_set_hidden_data(struct connman_service *service,
                                gpointer user_data);
 void __connman_service_return_error(struct connman_service *service,
index c5fe023..205573a 100644 (file)
@@ -105,6 +105,7 @@ struct connman_service {
        char *private_key_passphrase;
        char *phase2;
        DBusMessage *pending;
+       DBusMessage *provider_pending;
        guint timeout;
        struct connman_stats stats;
        struct connman_stats stats_roaming;
@@ -3468,6 +3469,31 @@ static void reply_pending(struct connman_service *service, int error)
        }
 }
 
+connman_bool_t
+__connman_service_is_provider_pending(struct connman_service *service)
+{
+       if (service == NULL)
+               return FALSE;
+
+       if (service->provider_pending != NULL)
+               return TRUE;
+
+       return FALSE;
+}
+
+void __connman_service_set_provider_pending(struct connman_service *service,
+                                                       DBusMessage *msg)
+{
+       if (service->provider_pending != NULL) {
+               DBG("service %p provider pending msg %p already exists",
+                       service, service->provider_pending);
+               return;
+       }
+
+       service->provider_pending = msg;
+       return;
+}
+
 static void check_pending_msg(struct connman_service *service)
 {
        if (service->pending == NULL)