service: Split reply_pending function to two parts
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Fri, 15 Jun 2012 13:00:19 +0000 (16:00 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 18 Jun 2012 07:55:40 +0000 (10:55 +0300)
Split reply_pending() into two parts so that a D-Bus reply can be
sent to the client waiting for a reply.

src/connman.h
src/service.c

index cbf88fc..49fa76d 100644 (file)
@@ -624,6 +624,7 @@ 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);
+void __connman_service_reply_dbus_pending(DBusMessage *pending, int error);
 
 int __connman_service_provision_changed(const char *ident);
 void __connman_service_set_config(struct connman_service *service,
index 2577677..c353e8e 100644 (file)
@@ -3388,35 +3388,42 @@ static void remove_timeout(struct connman_service *service)
        }
 }
 
-static void reply_pending(struct connman_service *service, int error)
+void __connman_service_reply_dbus_pending(DBusMessage *pending, int error)
 {
-       remove_timeout(service);
-
-       if (service->pending != NULL) {
+       if (pending != NULL) {
                if (error > 0) {
                        DBusMessage *reply;
 
-                       reply = __connman_error_failed(service->pending,
-                                                               error);
+                       reply = __connman_error_failed(pending, error);
                        if (reply != NULL)
                                g_dbus_send_message(connection, reply);
                } else {
-                       const char *sender;
+                       const char *sender, *path;
 
-                       sender = dbus_message_get_interface(service->pending);
+                       sender = dbus_message_get_interface(pending);
+                       path = dbus_message_get_path(pending);
 
-                       DBG("sender %s", sender);
+                       DBG("sender %s path %s", sender, path);
 
                        if (g_strcmp0(sender, CONNMAN_MANAGER_INTERFACE) == 0)
-                               g_dbus_send_reply(connection, service->pending,
-                                       DBUS_TYPE_OBJECT_PATH, &service->path,
+                               g_dbus_send_reply(connection, pending,
+                                       DBUS_TYPE_OBJECT_PATH, &path,
                                                        DBUS_TYPE_INVALID);
                        else
-                               g_dbus_send_reply(connection, service->pending,
+                               g_dbus_send_reply(connection, pending,
                                                        DBUS_TYPE_INVALID);
                }
 
-               dbus_message_unref(service->pending);
+               dbus_message_unref(pending);
+       }
+}
+
+static void reply_pending(struct connman_service *service, int error)
+{
+       remove_timeout(service);
+
+       if (service->pending != NULL) {
+               __connman_service_reply_dbus_pending(service->pending, error);
                service->pending = NULL;
        }
 }