service: Add support functions for pending replies
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Fri, 15 Jun 2012 13:00:20 +0000 (16:00 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 18 Jun 2012 07:56:52 +0000 (10:56 +0300)
src/connman.h
src/service.c

index 49fa76d..db3934d 100644 (file)
@@ -624,6 +624,10 @@ 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);
 int __connman_service_disconnect_all(void);
 void __connman_service_auto_connect(void);
 gboolean __connman_service_remove(struct connman_service *service);
+void __connman_service_set_hidden_data(struct connman_service *service,
+                               gpointer user_data);
+void __connman_service_return_error(struct connman_service *service,
+                               int error, gpointer user_data);
 void __connman_service_reply_dbus_pending(DBusMessage *pending, int error);
 
 int __connman_service_provision_changed(const char *ident);
 void __connman_service_reply_dbus_pending(DBusMessage *pending, int error);
 
 int __connman_service_provision_changed(const char *ident);
index c353e8e..a3a0160 100644 (file)
@@ -3428,6 +3428,38 @@ static void reply_pending(struct connman_service *service, int error)
        }
 }
 
        }
 }
 
+static void check_pending_msg(struct connman_service *service)
+{
+       if (service->pending == NULL)
+               return;
+
+       DBG("service %p pending msg %p already exists", service,
+                                               service->pending);
+       dbus_message_unref(service->pending);
+}
+
+void __connman_service_set_hidden_data(struct connman_service *service,
+                                                       gpointer user_data)
+{
+       DBusMessage *pending = user_data;
+
+       DBG("service %p pending %p", service, pending);
+
+       check_pending_msg(service);
+
+       service->pending = pending;
+}
+
+void __connman_service_return_error(struct connman_service *service,
+                               int error, gpointer user_data)
+{
+       DBG("service %p error %d user_data %p", service, error, user_data);
+
+       __connman_service_set_hidden_data(service, user_data);
+
+       reply_pending(service, error);
+}
+
 static gboolean connect_timeout(gpointer user_data)
 {
        struct connman_service *service = user_data;
 static gboolean connect_timeout(gpointer user_data)
 {
        struct connman_service *service = user_data;