#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"
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);
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
}
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;
}
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 */
}
}
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)) {
{
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);
}
} 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();