Upgrading signal subscription logic. 46/84646/1 accepted/tizen/common/20160824.154526 accepted/tizen/ivi/20160825.000601 accepted/tizen/mobile/20160825.000508 accepted/tizen/tv/20160825.000525 accepted/tizen/wearable/20160825.000540 submit/tizen/20160824.043713
authorNishant Chaprana <n.chaprana@samsung.com>
Sat, 20 Aug 2016 05:49:53 +0000 (11:19 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Sat, 20 Aug 2016 05:49:53 +0000 (11:19 +0530)
Currently there is a common signal handler which receives signal
and then checks signal name to call signals handler function.

This process is done for every received signal.

If we register signals seperately then dbus will directly call
signal handler function.

Change-Id: Id3b641a19782da2163f1c3e5aebb63776738f849
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/capi-network-wifi-direct.spec
src/include/wifi-direct-client-proxy.h
src/wifi-direct-client-proxy.c
src/wifi-direct-dbus.c

index e1df9a4c7481828d2bc5c9852614d9972ae2d621..ecf503a98eaad7c93dda91a5de6c5534f10e1502 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-network-wifi-direct
 Summary:    Network WiFi-Direct Library
-Version:    1.2.71
+Version:    1.2.72
 Release:    1
 Group:      Network & Connectivity/API
 License:    Apache-2.0
index 3ccab11d2e3002e40ce620923a7ac1ff5fea9b85..751504195f7d54094aa785a97d65a15357d65af5 100644 (file)
@@ -84,38 +84,125 @@ extern char *wfd_debug_print(char *file, int line, char *format, ...);
 
 /* Manage */
 void wifi_direct_process_manage_activation(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data);
+
 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                            const gchar *sender,
+                                            const gchar *object_path,
+                                            const gchar *interface,
+                                            const gchar *signal,
+                                            GVariant *parameters,
+                                            gpointer user_data);
+
 void wifi_direct_process_manage_connection(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data);
+
 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                             const gchar *sender,
+                                             const gchar *object_path,
+                                             const gchar *interface,
+                                             const gchar *signal,
+                                             GVariant *parameters,
+                                             gpointer user_data);
+
 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                const gchar *sender,
+                                                const gchar *object_path,
+                                                const gchar *interface,
+                                                const gchar *signal,
+                                                GVariant *parameters,
+                                                gpointer user_data);
+
 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                              const gchar *sender,
+                                              const gchar *object_path,
+                                              const gchar *interface,
+                                              const gchar *signal,
+                                              GVariant *parameters,
+                                              gpointer user_data);
+
 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                 const gchar *sender,
+                                                 const gchar *object_path,
+                                                 const gchar *interface,
+                                                 const gchar *signal,
+                                                 GVariant *parameters,
+                                                 gpointer user_data);
+
 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                  const gchar *sender,
+                                                  const gchar *object_path,
+                                                  const gchar *interface,
+                                                  const gchar *signal,
+                                                  GVariant *parameters,
+                                                  gpointer user_data);
+
 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data);
+
 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                         const gchar *sender,
+                                         const gchar *object_path,
+                                         const gchar *interface,
+                                         const gchar *signal,
+                                         GVariant *parameters,
+                                         gpointer user_data);
 
 /* Group */
 void wifi_direct_process_group_created(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                      const gchar *sender,
+                                      const gchar *object_path,
+                                      const gchar *interface,
+                                      const gchar *signal,
+                                      GVariant *parameters,
+                                      gpointer user_data);
+
 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                        const gchar *sender,
+                                        const gchar *object_path,
+                                        const gchar *interface,
+                                        const gchar *signal,
+                                        GVariant *parameters,
+                                        gpointer user_data);
 
 /* Service */
 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                  const gchar *sender,
+                                                  const gchar *object_path,
+                                                  const gchar *interface,
+                                                  const gchar *signal,
+                                                  GVariant *parameters,
+                                                  gpointer user_data);
+
 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                const gchar *sender,
+                                                const gchar *object_path,
+                                                const gchar *interface,
+                                                const gchar *signal,
+                                                GVariant *parameters,
+                                                gpointer user_data);
+
 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters);
+                                                   const gchar *sender,
+                                                   const gchar *object_path,
+                                                   const gchar *interface,
+                                                   const gchar *signal,
+                                                   GVariant *parameters,
+                                                   gpointer user_data);
 
 #endif /** __WIFI_DIRECT_CLIENT_PROXY_H_ */
index 71311740d7c53fbd7fcf88c46ab7905e721bb61b..5cefcec7a68696d9a4ff3d1d4ccc2b5d1aa5d5e3 100644 (file)
@@ -164,7 +164,12 @@ void __wfd_vconf_state_changed_cb(keynode_t *key, void *data)
 
 /* Manage */
 void wifi_direct_process_manage_activation(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        int error_code;
@@ -190,7 +195,12 @@ void wifi_direct_process_manage_activation(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                            const gchar *sender,
+                                            const gchar *object_path,
+                                            const gchar *interface,
+                                            const gchar *signal,
+                                            GVariant *parameters,
+                                            gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        int error_code;
@@ -218,7 +228,12 @@ void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
 
 //LCOV_EXCL_START
 void wifi_direct_process_manage_connection(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        int error_code;
@@ -249,7 +264,12 @@ void wifi_direct_process_manage_connection(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                             const gchar *sender,
+                                             const gchar *object_path,
+                                             const gchar *interface,
+                                             const gchar *signal,
+                                             GVariant *parameters,
+                                             gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        int error_code;
@@ -280,7 +300,12 @@ void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                const gchar *sender,
+                                                const gchar *object_path,
+                                                const gchar *interface,
+                                                const gchar *signal,
+                                                GVariant *parameters,
+                                                gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        char *get_str = NULL;
@@ -330,7 +355,12 @@ void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                              const gchar *sender,
+                                              const gchar *object_path,
+                                              const gchar *interface,
+                                              const gchar *signal,
+                                              GVariant *parameters,
+                                              gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -349,7 +379,12 @@ void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                 const gchar *sender,
+                                                 const gchar *object_path,
+                                                 const gchar *interface,
+                                                 const gchar *signal,
+                                                 GVariant *parameters,
+                                                 gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -368,7 +403,12 @@ void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                  const gchar *sender,
+                                                  const gchar *object_path,
+                                                  const gchar *interface,
+                                                  const gchar *signal,
+                                                  GVariant *parameters,
+                                                  gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -387,7 +427,12 @@ void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                          const gchar *sender,
+                                          const gchar *object_path,
+                                          const gchar *interface,
+                                          const gchar *signal,
+                                          GVariant *parameters,
+                                          gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        const gchar *peer_mac_address = NULL;
@@ -423,7 +468,12 @@ void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
 }
 
 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                         const gchar *sender,
+                                         const gchar *object_path,
+                                         const gchar *interface,
+                                         const gchar *signal,
+                                         GVariant *parameters,
+                                         gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        const gchar *peer_mac_address = NULL;
@@ -460,7 +510,12 @@ void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
 
 /* Group */
 void wifi_direct_process_group_created(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                      const gchar *sender,
+                                      const gchar *object_path,
+                                      const gchar *interface,
+                                      const gchar *signal,
+                                      GVariant *parameters,
+                                      gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -480,7 +535,12 @@ void wifi_direct_process_group_created(GDBusConnection *connection,
 }
 
 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                        const gchar *sender,
+                                        const gchar *object_path,
+                                        const gchar *interface,
+                                        const gchar *signal,
+                                        GVariant *parameters,
+                                        gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -502,7 +562,12 @@ void wifi_direct_process_group_destroyed(GDBusConnection *connection,
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
 /* Service */
 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                  const gchar *sender,
+                                                  const gchar *object_path,
+                                                  const gchar *interface,
+                                                  const gchar *signal,
+                                                  GVariant *parameters,
+                                                  gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
@@ -524,7 +589,12 @@ void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
 }
 
 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                const gchar *sender,
+                                                const gchar *object_path,
+                                                const gchar *interface,
+                                                const gchar *signal,
+                                                GVariant *parameters,
+                                                gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_service_type_e service_type;
@@ -557,7 +627,12 @@ void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
 }
 
 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
+                                                   const gchar *sender,
+                                                   const gchar *object_path,
+                                                   const gchar *interface,
+                                                   const gchar *signal,
+                                                   GVariant *parameters,
+                                                   gpointer user_data)
 {
        __WDC_LOG_FUNC_START__;
        wifi_direct_client_info_s *client = __wfd_get_control();
index 2d4107ef1d1f494479f9870a6d998e261493fd5e..cc9750e33cea2835a85d80cfe8af7b7ec8b93a3e 100644 (file)
@@ -37,122 +37,117 @@ typedef struct {
 static __thread gdbus_connection_data gdbus_conn = {NULL, 0};
 
 static struct {
+       int sub_id;
        const char *interface;
        const char *member;
        void (*function) (GDBusConnection *connection,
+                         const gchar *sender,
                          const gchar *object_path,
-                         GVariant *parameters);
+                         const gchar *interface,
+                         const gchar *signal,
+                         GVariant *parameters,
+                         gpointer user_data);
 } wifi_direct_dbus_signal_map[] = {
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "Activation",
                wifi_direct_process_manage_activation
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "Deactivation",
                wifi_direct_process_manage_deactivation
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "Connection",
                wifi_direct_process_manage_connection
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "Disconnection",
                wifi_direct_process_manage_disconnection
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "PeerIPAssigned",
                wifi_direct_process_manage_peer_ip_assigned
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "DiscoveryStarted",
                wifi_direct_process_manage_discovery_started
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "ListenStarted",
                wifi_direct_process_manage_listen_started
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "DiscoveryFinished",
                wifi_direct_process_manage_discovery_finished
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "PeerFound",
                wifi_direct_process_manage_peer_found
        },
        {
+               0,
                WFD_MANAGER_MANAGE_INTERFACE,
                "PeerLost",
                wifi_direct_process_manage_peer_lost
        },
        {
+               0,
                WFD_MANAGER_GROUP_INTERFACE,
                "Created",
                wifi_direct_process_group_created
        },
        {
+               0,
                WFD_MANAGER_GROUP_INTERFACE,
                "Destroyed",
                wifi_direct_process_group_destroyed
        },
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
        {
+               0,
                WFD_MANAGER_SERVICE_INTERFACE,
                "DiscoveryStarted",
                wifi_direct_process_service_discovery_started
        },
        {
+               0,
                WFD_MANAGER_SERVICE_INTERFACE,
                "DiscoveryFound",
                wifi_direct_process_service_discovery_found
        },
        {
+               0,
                WFD_MANAGER_SERVICE_INTERFACE,
                "DiscoveryFinished",
                wifi_direct_process_service_discovery_finished
        },
 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
        {
+               0,
                NULL,
                NULL,
                NULL
        }
 };
 
-static void _wifi_direct_dbus_signal_cb(GDBusConnection *connection,
-                                       const gchar *sender,
-                                       const gchar *object_path,
-                                       const gchar *interface,
-                                       const gchar *signal,
-                                       GVariant *parameters,
-                                       gpointer user_data)
-{
-       int i = 0;
-
-       WDC_LOGD("Signal Name [%s]", signal);
-       DBUS_DEBUG_VARIANT(parameters);
-
-       for (i = 0; wifi_direct_dbus_signal_map[i].member != NULL; i++) {
-               if (!g_strcmp0(signal, wifi_direct_dbus_signal_map[i].member) &&
-                   !g_strcmp0(interface,
-                              wifi_direct_dbus_signal_map[i].interface) &&
-                   wifi_direct_dbus_signal_map[i].function != NULL) {
-                       wifi_direct_dbus_signal_map[i].function(connection,
-                                                               object_path,
-                                                               parameters);
-                       break;
-               }
-       }
-}
-
 GVariant *wifi_direct_dbus_method_call_sync_debug(const char* interface_name,
                                                  const char* method,
                                                  GVariant *params,
@@ -188,8 +183,9 @@ GVariant *wifi_direct_dbus_method_call_sync_debug(const char* interface_name,
 gboolean wifi_direct_dbus_init(void)
 {
        GError *Error = NULL;
+       int i = 0;
 
-       if (gdbus_conn.signal_subscribe_id > 0) {
+       if (gdbus_conn.connection != NULL) {
                WDC_LOGI("GDbusConnection already initialized");
                return TRUE;
        }
@@ -202,32 +198,37 @@ gboolean wifi_direct_dbus_init(void)
        }
 
        /* subscribe signal handler */
-       gdbus_conn.signal_subscribe_id =
-               g_dbus_connection_signal_subscribe(gdbus_conn.connection,
-                                                  WFD_MANAGER_SERVICE, /* bus name */
-                                                  NULL, /* interface */
-                                                  NULL, /* member */
-                                                  WFD_MANAGER_PATH, /* object_path */
-                                                  NULL, /* arg0 */
-                                                  G_DBUS_SIGNAL_FLAGS_NONE,
-                                                  _wifi_direct_dbus_signal_cb,
-                                                  NULL,
-                                                  NULL);
-       WDC_LOGI("Subscribed dbus signals [%d]",
-                gdbus_conn.signal_subscribe_id);
+       for (i = 0; wifi_direct_dbus_signal_map[i].member != NULL; i++) {
+               wifi_direct_dbus_signal_map[i].sub_id =
+                       g_dbus_connection_signal_subscribe(gdbus_conn.connection,
+                                                          WFD_MANAGER_SERVICE, /* bus name */
+                                                          wifi_direct_dbus_signal_map[i].interface, /* interface */
+                                                          wifi_direct_dbus_signal_map[i].member, /* member */
+                                                          WFD_MANAGER_PATH, /* object_path */
+                                                          NULL, /* arg0 */
+                                                          G_DBUS_SIGNAL_FLAGS_NONE,
+                                                          wifi_direct_dbus_signal_map[i].function,
+                                                          NULL,
+                                                          NULL);
+               WDC_LOGD("Subscribed dbus signals [%d]", wifi_direct_dbus_signal_map[i].sub_id);
+       }
 
        return TRUE;
 }
 
 void wifi_direct_dbus_deinit(void)
 {
+       int i = 0;
+
        if (gdbus_conn.connection == NULL)
                return;
 
        /* unsubscribe signal handler */
-       g_dbus_connection_signal_unsubscribe(gdbus_conn.connection,
-                                            gdbus_conn.signal_subscribe_id);
-       gdbus_conn.signal_subscribe_id = 0;
+       for (i = 0; wifi_direct_dbus_signal_map[i].member != NULL; i++) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn.connection,
+                                                    wifi_direct_dbus_signal_map[i].sub_id);
+               wifi_direct_dbus_signal_map[i].sub_id = 0;
+       }
 
        /* unref gdbus connection */
        g_object_unref(gdbus_conn.connection);