Revise signal handler for Wi-Fi powered event from ConnMan accepted/tizen_2.1/20130425.035221 submit/tizen_2.1/20130424.231311
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 23 Apr 2013 08:05:24 +0000 (17:05 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 23 Apr 2013 08:09:00 +0000 (17:09 +0900)
Change-Id: I045a1c8a73b0d42e6879bade8e91374d1c33f6e6

include/netdbus.h
packaging/net-config.spec
src/dbus/netdbus.c
src/signal-handler.c
src/wifi-state.c

index af816d9..b6544e0 100644 (file)
@@ -41,6 +41,7 @@ extern "C" {
 #define CONNMAN_WIFI_SERVICE_PROFILE_PREFIX            CONNMAN_PATH "/service/wifi_"
 #define CONNMAN_ETHERNET_SERVICE_PROFILE_PREFIX                CONNMAN_PATH "/service/ethernet_"
 #define CONNMAN_BLUETOOTH_SERVICE_PROFILE_PREFIX       CONNMAN_PATH "/service/bluetooth_"
+#define CONNMAN_CELLULAR_TECHNOLOGY_PREFIX             CONNMAN_PATH "/technology/cellular"
 #define CONNMAN_WIFI_TECHNOLOGY_PREFIX                 CONNMAN_PATH "/technology/wifi"
 
 #define NETCONFIG_WIFI_INTERFACE                       "net.netconfig.wifi"
@@ -63,7 +64,7 @@ char *netconfig_wifi_get_connected_service_name(DBusMessage *message);
 DBusMessage *netconfig_invoke_dbus_method(const char *dest, const char *path,
                const char *interface_name, const char *method, char *param_array[]);
 gboolean netconfig_dbus_get_basic_params_string(DBusMessage *message,
-               char **key, void **value);
+               char **key, int type, void *value);
 gboolean netconfig_dbus_get_basic_params_array(DBusMessage *message,
                char **key, void **value);
 
index 116d0d1..b2048b8 100644 (file)
@@ -1,6 +1,6 @@
 Name:       net-config
 Summary:    TIZEN Network Configuration Module
-Version:    0.1.90_18
+Version:    0.1.90_19
 Release:    1
 Group:      System/Network
 License:    Apache License Version 2.0
index e0f7be1..9db6c19 100644 (file)
@@ -185,49 +185,32 @@ static gboolean __netconfig_dbus_append_param(
 }
 
 gboolean netconfig_dbus_get_basic_params_string(DBusMessage *message,
-               char **key, void **value)
+               char **key, int type, void *value)
 {
-       DBusMessageIter args, variant;
-       int type = 0;
+       DBusMessageIter iter, iter_variant;
 
-       if (key == NULL)
-               return FALSE;
-
-       /* read parameters */
-       if (dbus_message_iter_init(message, &args) == FALSE) {
-               DBG("Message does not have parameters");
-               return FALSE;
-       }
-
-       if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_STRING) {
-               DBG("Argument type %d", dbus_message_iter_get_arg_type(&args));
+       dbus_message_iter_init(message, &iter);
+       if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) {
+               DBG("Argument type %d", dbus_message_iter_get_arg_type(&iter));
                return FALSE;
        }
 
-       dbus_message_iter_get_basic(&args, key);
+       dbus_message_iter_get_basic(&iter, key);
 
        if (value == NULL)
                return TRUE;
 
-       dbus_message_iter_next(&args);
-
-       if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_VARIANT) {
-               DBG("Argument type %d", dbus_message_iter_get_arg_type(&args));
+       dbus_message_iter_next(&iter);
+       if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+               DBG("Argument type %d", dbus_message_iter_get_arg_type(&iter));
                return TRUE;
        }
 
-       dbus_message_iter_recurse(&args, &variant);
+       dbus_message_iter_recurse(&iter, &iter_variant);
+       if (dbus_message_iter_get_arg_type(&iter_variant) != type)
+               return FALSE;
 
-       type = dbus_message_iter_get_arg_type(&variant);
-       if (type == DBUS_TYPE_STRING)
-               dbus_message_iter_get_basic(&variant, value);
-       else if (type == DBUS_TYPE_BYTE || type == DBUS_TYPE_BOOLEAN ||
-                       type == DBUS_TYPE_INT16 || type == DBUS_TYPE_UINT16 ||
-                       type == DBUS_TYPE_INT32 || type == DBUS_TYPE_UINT32 ||
-                       type == DBUS_TYPE_DOUBLE)
-               dbus_message_iter_get_basic(&variant, *value);
-       else
-               DBG("Argument type %d", type);
+       dbus_message_iter_get_basic(&iter_variant, value);
 
        return TRUE;
 }
index 3c0d781..822a7ba 100644 (file)
@@ -83,46 +83,37 @@ static char *__netconfig_get_property(DBusMessage *msg, int *prop_value)
        return property;
 }
 
-static void __netconfig_wifi_technology_state_signal_handler(
-               const char *property, int prop_value)
+static void __netconfig_technology_signal_handler(DBusMessage *msg)
 {
-       static int previous_technology_state = FALSE;
-       GError **error = NULL;
+       char *key = NULL;
+       const char *tech = NULL;
+       dbus_bool_t value = FALSE;
 
-       if (property == NULL || g_str_equal(property, "Powered") != TRUE)
+       if (netconfig_dbus_get_basic_params_string(msg,
+                       &key, DBUS_TYPE_BOOLEAN, &value) != TRUE)
                return;
 
-       if (previous_technology_state == prop_value) {
-               INFO("Same as previous state");
+       tech = dbus_message_get_path(msg);
+       if (key == NULL || tech == NULL)
                return;
-       }
-
-       previous_technology_state = prop_value;
-
-       INFO("Technology property - [%s], prop_value - [%d]",
-                       property, prop_value);
 
-       if (prop_value == FALSE) {
-               enum netconfig_wifi_tech_state state = NETCONFIG_WIFI_TECH_OFF;
+       if (g_str_has_prefix(tech, CONNMAN_WIFI_TECHNOLOGY_PREFIX) == TRUE) {
+               INFO("Wi-Fi Technology %s, property %d", key, value);
 
-               state = netconfig_wifi_get_technology_state();
-               INFO("Wi-Fi technology state: %d", state);
-
-               if (NETCONFIG_WIFI_TECH_OFF == state ||
-                               NETCONFIG_WIFI_TECH_UNKNOWN == state) {
-                       if (netconfig_wifi_remove_driver() == TRUE) {
+               if (g_strcmp0(key, "Powered") == 0) {
+                       /* Power state */
+                       if (value == TRUE)
+                               netconfig_wifi_update_power_state(TRUE);
+                       else
                                netconfig_wifi_update_power_state(FALSE);
-
-                               netconfig_wifi_notify_power_completed(FALSE);
-                       } else {
-                               netconfig_error_wifi_driver_failed(error);
-                       }
+               } else if (g_strcmp0(key, "Connected") == 0) {
+                       /* Connection state */
+               } else if (g_strcmp0(key, "Tethering") == 0) {
+                       /* Tethering state */
                }
-       } else {
-               netconfig_wifi_update_power_state(TRUE);
-               netconfig_wifi_device_picker_service_start();
-
-               netconfig_wifi_notify_power_completed(TRUE);
+       } else if (g_str_has_prefix(tech,
+                       CONNMAN_CELLULAR_TECHNOLOGY_PREFIX) == TRUE) {
+               /* Cellular technology state */
        }
 }
 
@@ -244,26 +235,8 @@ static DBusHandlerResult __netconfig_signal_filter_handler(
                return DBUS_HANDLER_RESULT_HANDLED;
        } else if (dbus_message_is_signal(msg, CONNMAN_TECHNOLOGY_INTERFACE,
                        CONNMAN_SIGNAL_PROPERTY_CHANGED)) {
-               int prop_value = FALSE;
-               char *technology_path = NULL;
+               __netconfig_technology_signal_handler(msg);
 
-               technology_path = (char *)dbus_message_get_path(msg);
-               INFO("Technology object path: %s", technology_path);
-
-               if (g_str_has_prefix(technology_path,
-                               CONNMAN_WIFI_TECHNOLOGY_PREFIX) == FALSE) {
-                       return DBUS_HANDLER_RESULT_HANDLED;
-               }
-
-               sigvalue = __netconfig_get_property(msg, &prop_value);
-               if (sigvalue == NULL)
-                       return DBUS_HANDLER_RESULT_HANDLED;
-
-               INFO("Technology Property - [%s], Value - [%d]", sigvalue, prop_value);
-               __netconfig_wifi_technology_state_signal_handler(
-                               (const char *)sigvalue, prop_value);
-
-               /* We have handled this message, don't pass it on */
                return DBUS_HANDLER_RESULT_HANDLED;
        } else if (dbus_message_is_signal(msg, CONNMAN_SERVICE_INTERFACE,
                        CONNMAN_SIGNAL_PROPERTY_CHANGED)) {
index 6293f13..dc513a6 100644 (file)
@@ -309,13 +309,21 @@ void netconfig_wifi_update_power_state(gboolean powered)
 {
        int wifi_state = 0;
 
+       /* It's automatically updated by signal-handler
+        * DO NOT update manually
+        * It includes Wi-Fi state configuration
+        */
        vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
 
        if (powered == TRUE) {
                if (wifi_state == VCONFKEY_WIFI_OFF &&
                                netconfig_is_wifi_direct_on() != TRUE &&
                                netconfig_is_wifi_tethering_on() != TRUE) {
-                       DBG("Wi-Fi successfully turned on");
+                       DBG("Wi-Fi successfully turned on or waken up from power-save mode");
+
+                       netconfig_wifi_notify_power_completed(TRUE);
+
+                       netconfig_wifi_device_picker_service_start();
 
                        vconf_set_int(VCONFKEY_NETWORK_WIFI_STATE, VCONFKEY_NETWORK_WIFI_NOT_CONNECTED);
 
@@ -327,7 +335,13 @@ void netconfig_wifi_update_power_state(gboolean powered)
                }
        } else {
                if (wifi_state != VCONFKEY_WIFI_OFF) {
-                       DBG("Wi-Fi successfully turned off");
+                       DBG("Wi-Fi successfully turned off or in power-save mode");
+
+                       netconfig_wifi_device_picker_service_stop();
+
+                       netconfig_wifi_remove_driver();
+
+                       netconfig_wifi_notify_power_completed(FALSE);
 
                        netconfig_del_wifi_found_notification();