From: Saurav Babu Date: Wed, 13 Dec 2017 09:45:09 +0000 (+0530) Subject: net-config: Notify network configuration changes using dbus signal X-Git-Tag: submit/tizen/20171218.085650~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b4855ffe018c72ac3f6ba881a1b68bff6ddc502;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git net-config: Notify network configuration changes using dbus signal This patch notifies network configuration changes like Connection Type, IPv4 Address, IPv6 Address and Proxy Address using dbus signal Change-Id: Icb10274d6306637770e847e575f4ea9644e2f9ab Signed-off-by: Saurav Babu --- diff --git a/src/network-state.c b/src/network-state.c index 99b2d62..61c5242 100755 --- a/src/network-state.c +++ b/src/network-state.c @@ -716,17 +716,37 @@ static void __netconfig_update_default_connection_info(void) const char *ip_addr6 = netconfig_get_default_ipaddress6(); const char *proxy_addr = netconfig_get_default_proxy(); unsigned int freq = netconfig_get_default_frequency(); + GVariantBuilder *builder; + GVariant *params; if (emulator_is_emulated() == TRUE) { - if (ip_addr != NULL) + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + + if (ip_addr != NULL) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ip_addr); - else + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string(ip_addr)); + } else { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ""); + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string("")); + } - if (ip_addr6 != NULL) + if (ip_addr6 != NULL) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, ip_addr6); - else + g_variant_builder_add(builder, "{sv}", "IPv6Address", + g_variant_new_string(ip_addr6)); + } else { netconfig_set_vconf_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); return; } @@ -734,18 +754,36 @@ static void __netconfig_update_default_connection_info(void) if (profile == NULL) DBG("Reset network state configuration"); else - DBG("profile[%s] ipv4(%s) ipv6(%s) proxy(%s)", profile, ip_addr, ip_addr6, proxy_addr); + DBG("profile[%s] ipv4(%s) ipv6(%s) proxy(%s)", profile, ip_addr, + ip_addr6, proxy_addr); netconfig_vconf_get_int(VCONFKEY_NETWORK_STATUS, &old_network_status); if (profile == NULL && old_network_status != VCONFKEY_NETWORK_OFF) { + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_OFF); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_OFF)); netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ""); + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string("")); + netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, ""); + g_variant_builder_add(builder, "{sv}", "IPv6Address", + g_variant_new_string("")); + netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, ""); + g_variant_builder_add(builder, "{sv}", "ProxyAddress", + g_variant_new_string("")); + + params = g_variant_new("(@a{sv})", g_variant_builder_end(builder)); netconfig_set_vconf_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 0); + netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH, + NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", + params); netconfig_set_vconf_int("memory/private/wifi/frequency", 0); DBG("Successfully clear IP and PROXY up"); @@ -755,8 +793,13 @@ static void __netconfig_update_default_connection_info(void) char *old_ip6 = vconf_get_str(VCONFKEY_NETWORK_IP6); char *old_proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY); + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + if (netconfig_is_wifi_profile(profile) == TRUE) { - netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_WIFI); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, + VCONFKEY_NETWORK_WIFI); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_WIFI)); netconfig_set_vconf_int("memory/private/wifi/frequency", freq); netconfig_set_system_event(SYS_EVT_NETWORK_STATUS, @@ -774,52 +817,84 @@ static void __netconfig_update_default_connection_info(void) return; } - netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_CELLULAR); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, + VCONFKEY_NETWORK_CELLULAR); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_CELLULAR)); netconfig_set_system_event(SYS_EVT_NETWORK_STATUS, EKEY_NETWORK_STATUS, EVAL_NETWORK_CELLULAR); } else if (netconfig_is_ethernet_profile(profile) == TRUE) { - netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_ETHERNET); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, + VCONFKEY_NETWORK_ETHERNET); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_ETHERNET)); netconfig_set_system_event(SYS_EVT_NETWORK_STATUS, EKEY_NETWORK_STATUS, EVAL_NETWORK_ETHERNET); } else if (netconfig_is_bluetooth_profile(profile) == TRUE) { - netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_BLUETOOTH); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, + VCONFKEY_NETWORK_BLUETOOTH); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_BLUETOOTH)); netconfig_set_system_event(SYS_EVT_NETWORK_STATUS, EKEY_NETWORK_STATUS, EVAL_NETWORK_BT); } else{ - netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_OFF); + netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, + VCONFKEY_NETWORK_OFF); + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_OFF)); netconfig_set_system_event(SYS_EVT_NETWORK_STATUS, EKEY_NETWORK_STATUS, EVAL_NETWORK_DISCONNECTED); } if (g_strcmp0(old_ip, ip_addr) != 0 || old_ip == NULL) { - if (ip_addr != NULL) + if (ip_addr != NULL) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ip_addr); - else if (old_ip != NULL && strlen(old_ip) > 0) + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string(ip_addr)); + } else if (old_ip != NULL && strlen(old_ip) > 0) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ""); + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string("")); + } } if (old_ip) free(old_ip); if (g_strcmp0(old_ip6, ip_addr6) != 0 || old_ip6 == NULL) { - if (ip_addr6 != NULL) + if (ip_addr6 != NULL) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, ip_addr6); - else if (old_ip6 != NULL && strlen(old_ip6) > 0) + g_variant_builder_add(builder, "{sv}", "IPv6Address", + g_variant_new_string(ip_addr6)); + } else if (old_ip6 != NULL && strlen(old_ip6) > 0) { netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, ""); + g_variant_builder_add(builder, "{sv}", "IPv6Address", + g_variant_new_string("")); + } } if (old_ip6) free(old_ip6); if (g_strcmp0(old_proxy, proxy_addr) != 0) { - if (proxy_addr == NULL) + if (proxy_addr == NULL) { netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, ""); - else + g_variant_builder_add(builder, "{sv}", "ProxyAddress", + g_variant_new_string("")); + } else { netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, proxy_addr); + g_variant_builder_add(builder, "{sv}", "ProxyAddress", + g_variant_new_string(proxy_addr)); + } } if (old_proxy) free(old_proxy); + params = g_variant_new("(@a{sv})", g_variant_builder_end(builder)); + netconfig_set_vconf_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1); + netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH, + NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", + params); DBG("Successfully update default network configuration"); } diff --git a/src/signal-handler.c b/src/signal-handler.c index f53b49a..b9720a8 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -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); } @@ -356,9 +392,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 +406,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 +423,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); diff --git a/src/utils/emulator.c b/src/utils/emulator.c index f8629d3..29f1ab9 100755 --- a/src/utils/emulator.c +++ b/src/utils/emulator.c @@ -29,6 +29,7 @@ #include "log.h" #include "emulator.h" #include "util.h" +#include "netdbus.h" static gboolean netconfig_is_emulated = FALSE; @@ -62,6 +63,8 @@ static void __netconfig_emulator_set_ip(void) char ip[30] = { 0, }; int sockfd = 0; struct ifreq ifr; + GVariantBuilder *builder; + GVariant *params; sockfd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); if (sockfd < 0) { @@ -85,27 +88,62 @@ static void __netconfig_emulator_set_ip(void) inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), 30); vconf_set_str(VCONFKEY_NETWORK_IP, ip); + + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + g_variant_builder_add(builder, "{sv}", "IPv4Address", + g_variant_new_string(ip)); + + params = g_variant_new("(@a{sv})", g_variant_builder_end(builder)); + + netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH, + NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params); } static void __netconfig_emulator_set_proxy(void) { const char HTTP_PROXY[] = "http_proxy"; char *proxy = NULL; + GVariantBuilder *builder; + GVariant *params; proxy = netconfig_get_env(HTTP_PROXY); DBG("Get system proxy: %s", proxy); if (proxy != NULL) { vconf_set_str(VCONFKEY_NETWORK_PROXY, proxy); + + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + g_variant_builder_add(builder, "{sv}", "ProxyAddress", + g_variant_new_string(proxy)); + + 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(proxy); } } static void __netconfig_emulator_set_network_state(void) { + GVariantBuilder *builder; + GVariant *params; + vconf_set_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1); vconf_set_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_ETHERNET); vconf_set_int(VCONFKEY_DNET_STATE, VCONFKEY_DNET_NORMAL_CONNECTED); + + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); + + g_variant_builder_add(builder, "{sv}", "NetworkStatus", + g_variant_new_int32(VCONFKEY_NETWORK_ETHERNET)); + + params = g_variant_new("(@a{sv})", g_variant_builder_end(builder)); + + netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH, + NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params); } static void __netconfig_emulator_config_emul_env(void)