X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fsignal-handler.c;h=4fe67ad328540f444c8264af1b3f931651233b52;hb=refs%2Fchanges%2F51%2F179351%2F1;hp=0bd5689103c25c512a3ee5030bfa786d23540bb5;hpb=01b24ff1630dc85a823278a8f70e6247b1cd35fb;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git diff --git a/src/signal-handler.c b/src/signal-handler.c index 0bd5689..4fe67ad 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -39,6 +39,9 @@ #include "wifi-background-scan.h" #include "wifi-tdls.h" #include "ip-conflict-detect.h" +#if defined TIZEN_DEBUG_ENABLE +#include "network-dump.h" +#endif #define DBUS_SERVICE_DBUS "org.freedesktop.DBus" #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus" @@ -91,6 +94,9 @@ static const char supplicant_signals[SIG_MAX][MAX_SIG_LEN] = { }; static int supp_subscription_ids[SIG_MAX] = {0}; +#if defined TIZEN_DEBUG_ENABLE +static int dumpservice_subscription_id = 0; +#endif typedef void (*supplicant_signal_cb)(GDBusConnection *conn, const gchar *name, const gchar *path, const gchar *interface, @@ -99,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)) { @@ -112,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)) { @@ -137,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); } @@ -189,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; @@ -212,19 +255,21 @@ static void _service_signal_cb(GDBusConnection *conn, if (g_strcmp0(sigvalue, "State") == 0) { g_variant_get(variant, "s", &property); - if (g_strcmp0(property, "ready") == 0) { - for (idx = 0; idx < MAX_SOCKET_OPEN_RETRY; idx++) { - sd = start_ip_conflict_mon(); - if (sd != NULL) - break; + DBG("[%s] %s", property, path); + if (netconfig_is_wifi_profile(path) || netconfig_is_ethernet_profile(path)) { + if (g_strcmp0(property, "ready") == 0) { + for (idx = 0; idx < MAX_SOCKET_OPEN_RETRY; idx++) { + sd = start_ip_conflict_mon(); + if (sd != NULL) + break; + } + } else if (g_strcmp0(property, "online") == 0) { + // do nothing + } else { + stop_ip_conflict_mon(); } - } else if (g_strcmp0(property, "online") == 0) { - // do nothing - } else { - stop_ip_conflict_mon(); } - DBG("[%s] %s", property, path); if (netconfig_is_wifi_profile(path) == TRUE) { int wifi_state = 0; @@ -348,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); @@ -358,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; @@ -365,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); @@ -449,7 +520,7 @@ static void _services_changed_cb(GDBusConnection *conn, const gchar *name, is_cell_internet_prof = netconfig_is_cellular_internet_profile( service_path); if (service_path != NULL) { - while (g_variant_iter_loop(next, "{sv}", &property, + while (next && g_variant_iter_loop(next, "{sv}", &property, &variant)) { if (g_strcmp0(property, "State") == 0) { g_variant_get(variant, "s", &value); @@ -513,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) @@ -533,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); } } @@ -583,9 +683,14 @@ static void _supplicant_driver_hanged(GDBusConnection *conn, DBG("Driver Hanged handling!"); ERR("Critical. Wi-Fi firmware crashed"); +#if !defined TIZEN_WEARABLE + netconfig_send_message_to_net_popup("Wi-Fi Error", + "Wi-Fi Driver Hanged. Please get log dump and report", "popup", NULL); +#endif wifi_power_recover_firmware(); return; + } static void _supplicant_session_overlapped(GDBusConnection *conn, @@ -602,6 +707,28 @@ static void _supplicant_session_overlapped(GDBusConnection *conn, #endif } +#if defined TIZEN_DEBUG_ENABLE +static void __netconfig_dumpservice_handler(GDBusConnection *conn, + const gchar *name, const gchar *path, const gchar *interface, + const gchar *sig, GVariant *param, gpointer user_data) +{ + int mode; + gchar *signal_path = NULL; + + if (param == NULL) + return; + + g_variant_get(param, "(is)", &mode, &signal_path); + DBG("Path: %s and mode: %d", signal_path, mode); + + netconfig_dump_log(signal_path); + if (signal_path) + g_free(signal_path); + + return; +} +#endif + static void _supplicant_tdls_connected(GDBusConnection *conn, const gchar *name, const gchar *path, const gchar *interface, const gchar *sig, GVariant *param, gpointer user_data) @@ -734,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; @@ -939,6 +1066,22 @@ void register_gdbus_signal(void) INFO("Successfully register Supplicant DBus signal filters"); +#if defined TIZEN_DEBUG_ENABLE + dumpservice_subscription_id = g_dbus_connection_signal_subscribe( + connection, + NULL, + DUMP_SERVICE_INTERFACE, + DUMP_SIGNAL, + NULL, + NULL, + G_DBUS_SIGNAL_FLAGS_NONE, + __netconfig_dumpservice_handler, + NULL, + NULL); + + INFO("Successfully registered Dumpservice DBus signal filter"); +#endif + /* In case ConnMan precedes this signal register, * net-config should update the default connected profile. */ @@ -970,4 +1113,8 @@ void deregister_gdbus_signal(void) } } +#if defined TIZEN_DEBUG_ENABLE + g_dbus_connection_signal_unsubscribe(connection, + dumpservice_subscription_id); +#endif }