From 8718cc66eccd1894bd23bec4f8940bb645a15355 Mon Sep 17 00:00:00 2001 From: Seonah Moon Date: Mon, 13 Mar 2017 15:38:21 +0900 Subject: [PATCH] Add IPv4/IPv6 signal to update IP address Change-Id: I1d26635ec5fc1b166e2eebf40fe65972e15558fa Signed-off-by: Seonah Moon --- packaging/net-config.spec | 2 +- src/signal-handler.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packaging/net-config.spec b/packaging/net-config.spec index 00717c1..629915c 100755 --- a/packaging/net-config.spec +++ b/packaging/net-config.spec @@ -1,6 +1,6 @@ Name: net-config Summary: TIZEN Network Configuration service -Version: 1.1.102 +Version: 1.1.103 Release: 2 Group: System/Network License: Apache-2.0 diff --git a/src/signal-handler.c b/src/signal-handler.c index 9f02dc7..a7a132f 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -96,6 +96,56 @@ 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) +{ + gchar *key = NULL; + const gchar *value = NULL; + GVariant *var = NULL; + GVariantIter iter; + + g_variant_iter_init(&iter, dictionary); + while (g_variant_iter_loop(&iter, "{sv}", &key, &var)) { + if (g_strcmp0(key, "Address") == 0) { + value = g_variant_get_string(var, NULL); + char *old_ip = vconf_get_str(VCONFKEY_NETWORK_IP); + + DBG("Old IPv4.Address [%s] Received new IPv4.Address [%s]", old_ip, value); + if (g_strcmp0(old_ip, value) != 0) { + if (value == NULL) + vconf_set_str(VCONFKEY_NETWORK_IP, ""); + else + vconf_set_str(VCONFKEY_NETWORK_IP, value); + } + g_free(old_ip); + } + } +} + +static void __netconfig_extract_ipv6_signal_data(GVariant *dictionary, const gchar *profile) +{ + gchar *key = NULL; + const gchar *value = NULL; + GVariant *var = NULL; + GVariantIter iter; + + g_variant_iter_init(&iter, dictionary); + while (g_variant_iter_loop(&iter, "{sv}", &key, &var)) { + if (g_strcmp0(key, "Address") == 0) { + value = g_variant_get_string(var, NULL); + char *old_ip6 = vconf_get_str(VCONFKEY_NETWORK_IP); + + DBG("Old IPv6.Address [%s] Received new IPv6.Address [%s]", old_ip6, value); + if (g_strcmp0(old_ip6, value) != 0) { + if (value == NULL) + vconf_set_str(VCONFKEY_NETWORK_IP6, ""); + else + vconf_set_str(VCONFKEY_NETWORK_IP6, value); + } + g_free(old_ip6); + } + } +} + static void _technology_signal_cb(GDBusConnection *conn, const gchar *name, const gchar *path, const gchar *interface, const gchar *sig, GVariant *param, gpointer user_data) @@ -308,6 +358,10 @@ static void _service_signal_cb(GDBusConnection *conn, } g_variant_iter_free(iter); + } else if (g_strcmp0(sigvalue, "IPv4") == 0) { + __netconfig_extract_ipv4_signal_data(variant, path); + } else if (g_strcmp0(sigvalue, "IPv6") == 0) { + __netconfig_extract_ipv6_signal_data(variant, path); } else if (g_strcmp0(sigvalue, "Error") == 0) { g_variant_get(variant, "s", &property); INFO("[%s] Property : %s", sigvalue, property); -- 2.7.4