Fixed getting values from variant
[platform/core/connectivity/net-config.git] / src / signal-handler.c
index f53b49a..4fe67ad 100755 (executable)
@@ -105,12 +105,15 @@ typedef void (*connman_signal_cb)(GDBusConnection *conn,
                const gchar *name, const gchar *path, const gchar *interface,
                const gchar *sig, GVariant *param, gpointer user_data);
 
-static void __netconfig_extract_ipv4_signal_data(GVariant *dictionary, const gchar *profile)
+static void __netconfig_extract_ipv4_signal_data(GVariant *dictionary,
+               const gchar *profile)
 {
        gchar *key = NULL;
        const gchar *value = NULL;
        GVariant *var = NULL;
        GVariantIter iter;
+       GVariantBuilder *builder;
+       GVariant *params;
 
        g_variant_iter_init(&iter, dictionary);
        while (g_variant_iter_loop(&iter, "{sv}", &key, &var)) {
@@ -118,24 +121,42 @@ static void __netconfig_extract_ipv4_signal_data(GVariant *dictionary, const gch
                        g_variant_get(var, "&s", &value);
                        char *old_ip = vconf_get_str(VCONFKEY_NETWORK_IP);
 
-                       DBG("Old IPv4.Address [%s] Received new IPv4.Address [%s]", old_ip, value);
+                       DBG("Old IPv4.Address [%s] Received new IPv4.Address [%s]", old_ip,
+                                                 value);
                        if (g_strcmp0(old_ip, value) != 0) {
-                               if (value != NULL)
+                               builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+                               if (value != NULL) {
                                        vconf_set_str(VCONFKEY_NETWORK_IP, value);
-                               else if (old_ip != NULL && strlen(old_ip) > 0)
+                                       g_variant_builder_add(builder, "{sv}", "IPv4Address",
+                                                                 g_variant_new_string(value));
+                               } else if (old_ip != NULL && strlen(old_ip) > 0) {
                                        vconf_set_str(VCONFKEY_NETWORK_IP, "");
+                                       g_variant_builder_add(builder, "{sv}", "IPv4Address",
+                                                                 g_variant_new_string(""));
+                               }
+
+                               params = g_variant_new("(@a{sv})",
+                                                                          g_variant_builder_end(builder));
+
+                               netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged",
+                                                  params);
                        }
                        free(old_ip);
                }
        }
 }
 
-static void __netconfig_extract_ipv6_signal_data(GVariant *dictionary, const gchar *profile)
+static void __netconfig_extract_ipv6_signal_data(GVariant *dictionary,
+                                                                                                const gchar *profile)
 {
        gchar *key = NULL;
        const gchar *value = NULL;
        GVariant *var = NULL;
        GVariantIter iter;
+       GVariantBuilder *builder;
+       GVariant *params;
 
        g_variant_iter_init(&iter, dictionary);
        while (g_variant_iter_loop(&iter, "{sv}", &key, &var)) {
@@ -143,12 +164,27 @@ static void __netconfig_extract_ipv6_signal_data(GVariant *dictionary, const gch
                        g_variant_get(var, "&s", &value);
                        char *old_ip6 = vconf_get_str(VCONFKEY_NETWORK_IP6);
 
-                       DBG("Old IPv6.Address [%s] Received new IPv6.Address [%s]", old_ip6, value);
+                       DBG("Old IPv6.Address [%s] Received new IPv6.Address [%s]", old_ip6,
+                                                       value);
                        if (g_strcmp0(old_ip6, value) != 0) {
-                               if (value != NULL)
+                               builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+                               if (value != NULL) {
                                        vconf_set_str(VCONFKEY_NETWORK_IP6, value);
-                               else if (old_ip6 != NULL && strlen(old_ip6) > 0)
+                                       g_variant_builder_add(builder, "{sv}", "IPv6Address",
+                                                                 g_variant_new_string(value));
+                               } else if (old_ip6 != NULL && strlen(old_ip6) > 0) {
                                        vconf_set_str(VCONFKEY_NETWORK_IP6, "");
+                                       g_variant_builder_add(builder, "{sv}", "IPv6Address",
+                                                                 g_variant_new_string(""));
+                               }
+
+                               params = g_variant_new("(@a{sv})",
+                                                                          g_variant_builder_end(builder));
+
+                               netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged",
+                                                  params);
                        }
                        free(old_ip6);
                }
@@ -195,7 +231,8 @@ static void _technology_signal_cb(GDBusConnection *conn,
 
 static void _service_signal_cb(GDBusConnection *conn,
                const gchar *name, const gchar *path,
-               const gchar *interface, const gchar *sig, GVariant *param, gpointer user_data)
+               const gchar *interface, const gchar *sig,
+               GVariant *param, gpointer user_data)
 {
        gchar *sigvalue = NULL;
        gchar *property;
@@ -356,9 +393,13 @@ static void _service_signal_cb(GDBusConnection *conn,
 
                g_variant_get(variant, "a{sv}", &iter);
                while (g_variant_iter_loop(iter, "{sv}", &property, &var)) {
+                       GVariantBuilder *builder;
+                       GVariant *sig_params;
                        if (g_strcmp0(property, "Servers") == 0) {
                                GVariantIter *iter_sub = NULL;
 
+                               builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
                                g_variant_get(var, "as", &iter_sub);
                                g_variant_iter_loop(iter_sub, "s", &value);
                                g_variant_iter_free(iter_sub);
@@ -366,6 +407,16 @@ static void _service_signal_cb(GDBusConnection *conn,
                                DBG("Proxy - [%s]", value);
                                vconf_set_str(VCONFKEY_NETWORK_PROXY, value);
 
+                               g_variant_builder_add(builder, "{sv}", "ProxyAddress",
+                                                               g_variant_new_string(value));
+
+                               sig_params = g_variant_new("(@a{sv})",
+                                                               g_variant_builder_end(builder));
+
+                               netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged",
+                                                  sig_params);
+
                                g_free(property);
                                g_variant_unref(var);
                                break;
@@ -373,8 +424,20 @@ static void _service_signal_cb(GDBusConnection *conn,
                                value = g_variant_get_string(var, NULL);
                                DBG("Method - [%s]", value);
 
-                               if (g_strcmp0(value, "direct") == 0)
+                               if (g_strcmp0(value, "direct") == 0) {
+                                       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
                                        vconf_set_str(VCONFKEY_NETWORK_PROXY, "");
+                                       g_variant_builder_add(builder, "{sv}", "ProxyAddress",
+                                                               g_variant_new_string(""));
+
+                                       sig_params = g_variant_new("(@a{sv})",
+                                                               g_variant_builder_end(builder));
+
+                                       netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                                          NETCONFIG_NETWORK_INTERFACE,
+                                                          "NetworkConfigChanged", sig_params);
+                               }
 
                                g_free(property);
                                g_variant_unref(var);
@@ -521,9 +584,11 @@ static void _supplicant_properties_changed(GDBusConnection *conn,
                const gchar *name, const gchar *path, const gchar *interface,
                const gchar *sig, GVariant *param, gpointer user_data)
 {
-       gchar *key;
-       GVariantIter *iter;
-       GVariant *variant;
+       DBG("Properties changed handling!");
+       gchar *key = NULL;
+       const gchar *state = NULL;
+       GVariantIter *iter = NULL;
+       GVariant *variant = NULL;
        gboolean scanning = FALSE;
 
        if (param == NULL)
@@ -541,7 +606,34 @@ static void _supplicant_properties_changed(GDBusConnection *conn,
 
                        g_variant_unref(variant);
                        g_free(key);
+                       variant = NULL;
+                       key = NULL;
                        break;
+               } else if (g_strcmp0(key, "State") == 0) {
+                       state = g_variant_get_string(variant, NULL);
+                       if (state != NULL)
+                               ERR("Supplicant state : %s", state);
+
+                       g_variant_unref(variant);
+                       g_free(key);
+                       variant = NULL;
+                       key = NULL;
+                       break;
+               } else if (g_strcmp0(key, "DisconnectReason") == 0) {
+                       int reason = g_variant_get_int32(variant);
+                       ERR("Supplicant DisconnReason : %d", reason);
+
+                       g_variant_unref(variant);
+                       g_free(key);
+                       variant = NULL;
+                       key = NULL;
+                       break;
+               } else {
+                       gchar *value;
+                       value = g_variant_print(variant, TRUE);
+                       DBG("Supplicant %s : %s", key, value);
+
+                       g_free(value);
                }
        }
 
@@ -769,8 +861,8 @@ error:
 static void _supplicant_wifi_wps_credentials(GVariant *param)
 {
        gchar *key;
-       char ssid[32];
-       char wps_key[100];
+       char ssid[32] = {0, };
+       char wps_key[100] = {0, };
        GVariantIter *iter;
        GVariant *variant;
        int config_error = 0;