X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwifi-agent.c;h=f130d95c2e1eefb51db0c95f6e0f71fbf9339820;hb=6d12d1bb86181a1a52de76118627b8c6df3f7151;hp=c9ac420f9ee9c4a58361184c531f7e54ba3eb785;hpb=697f0ce9d4c7c6258cb121b435984bb5faada013;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git diff --git a/src/wifi-agent.c b/src/wifi-agent.c old mode 100644 new mode 100755 index c9ac420..f130d95 --- a/src/wifi-agent.c +++ b/src/wifi-agent.c @@ -17,7 +17,6 @@ * */ -#include #include #include #include @@ -33,6 +32,7 @@ #include "wifi-eap-config.h" #include "network-state.h" #include "network-accessibility.h" +#include "wifi-key-encryption.h" #define NETCONFIG_AGENT_FIELD_NAME "Name" #define NETCONFIG_AGENT_FIELD_SSID "SSID" @@ -41,91 +41,102 @@ #define NETCONFIG_AGENT_FIELD_WPS "WPS" #define NETCONFIG_AGENT_FIELD_WPS_PBC "WPS_PBC" #define NETCONFIG_AGENT_FIELD_WPS_PIN "WPS_PIN" +#if defined TIZEN_CAPTIVE_PORTAL +#define NETCONFIG_AGENT_FIELD_USERNAME "Username" +#define NETCONFIG_AGENT_FIELD_PASSWORD "Password" +#endif #define NETCONFIG_AGENT_ERR_CONNECT_FAILED "connect-failed" -struct netconfig_wifi_agent { +typedef struct { + char *interface_name; GByteArray *ssid; char *name; char *identity; char *passphrase; char *wps_pin; +#if defined TIZEN_CAPTIVE_PORTAL + char *username; + char *password; +#endif gboolean wps_pbc; -}; +} netconfig_wifi_agent_s; -static struct netconfig_wifi_agent agent; +static GSList *g_agent_list = NULL; -static void __netconfig_agent_clear_fields(void) +static void __agent_clear_fields(netconfig_wifi_agent_s *agent) { - g_byte_array_free(agent.ssid, TRUE); - g_free(agent.name); - g_free(agent.identity); - g_free(agent.passphrase); - g_free(agent.wps_pin); - - agent.ssid = NULL; - agent.name = NULL; - agent.identity = NULL; - agent.passphrase = NULL; - agent.wps_pin = NULL; - agent.wps_pbc = FALSE; + if (!agent) + return; + + g_free(agent->interface_name); + if (agent->ssid) + g_byte_array_free(agent->ssid, TRUE); + g_free(agent->name); + g_free(agent->identity); + g_free(agent->passphrase); + g_free(agent->wps_pin); +#if defined TIZEN_CAPTIVE_PORTAL + g_free(agent->username); + g_free(agent->password); +#endif + + agent->interface_name = NULL; + agent->ssid = NULL; + agent->name = NULL; + agent->identity = NULL; + agent->passphrase = NULL; + agent->wps_pin = NULL; +#if defined TIZEN_CAPTIVE_PORTAL + agent->username = NULL; + agent->password = NULL; +#endif + agent->wps_pbc = FALSE; } -int netconfig_agent_register(void) +static void __agent_free_data(gpointer data) +{ + netconfig_wifi_agent_s *agent = data; + + __agent_clear_fields(agent); + g_free(agent); +} + +static netconfig_wifi_agent_s *__agent_get_data(const char *interface_name) +{ + GSList *list = NULL; + + for (list = g_agent_list; list; list = list->next) { + netconfig_wifi_agent_s *wifi_agent = list->data; + if (g_strcmp0(wifi_agent->interface_name, interface_name) == 0) + return wifi_agent; + } + + return NULL; +} + +int connman_register_agent(void) { GVariant *reply = NULL; GVariant *params = NULL; - GError *error; - GDBusConnection *connection = NULL; - connection = netconfig_gdbus_get_connection(); - if (connection == NULL) { - ERR("GDBusconnection is NULL"); - return -1; - } + params = g_variant_new("(o)", NETCONFIG_WIFI_PATH); + reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE, + CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, + "RegisterAgent", params); - do { - error = NULL; - params = g_variant_new("(o)", NETCONFIG_WIFI_PATH); - - reply = g_dbus_connection_call_sync( - connection, - CONNMAN_SERVICE, - CONNMAN_MANAGER_PATH, - CONNMAN_MANAGER_INTERFACE, - "RegisterAgent", - params, - NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, - netconfig_gdbus_get_gdbus_cancellable(), - &error); - - if (reply == NULL) { - if (error != NULL) { - if (g_strcmp0(error->message, - "GDBus.Error:net.connman.Error.AlreadyExists: Already exists") == 0) { - break; - } else { - ERR("Fail to register agent [%d: %s]", - error->code, error->message); - } - - g_error_free(error); - } else - ERR("Fail to register agent"); - } else - g_variant_unref(reply); - - sleep(1); - } while (TRUE); + if (reply == NULL) { + ERR("Fail to register agent"); + return FALSE; + } else + g_variant_unref(reply); INFO("Registered to connman agent successfully"); - return 0; + return TRUE; } -int netconfig_agent_unregister(void) +int connman_unregister_agent(void) { gboolean reply = FALSE; GVariant *param = NULL; @@ -137,37 +148,52 @@ int netconfig_agent_unregister(void) reply = netconfig_invoke_dbus_method_nonblock(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, - "UnregisterAgent", param, NULL); + "UnregisterAgent", param, NULL, NULL); if (reply != TRUE) ERR("Fail to unregister agent"); /* Clearing the agent fields */ - __netconfig_agent_clear_fields(); + g_slist_free_full(g_agent_list, __agent_free_data); return reply; } -gboolean netconfig_wifi_set_agent_field_for_eap_network( - const char *name, const char *identity, const char *passphrase) +gboolean netconfig_wifi_set_agent_field_for_eap_network(const char *interface_name, + const char *name, const char *identity, const char *passphrase) { int name_len; + netconfig_wifi_agent_s *wifi_agent = NULL; if (name == NULL) return FALSE; - __netconfig_agent_clear_fields(); + wifi_agent = __agent_get_data(interface_name); + if (wifi_agent == NULL) + return FALSE; + + __agent_clear_fields(wifi_agent); name_len = strlen(name); - agent.ssid = g_byte_array_sized_new(name_len); - agent.ssid->len = name_len; - memcpy(agent.ssid->data, name, name_len); + wifi_agent->ssid = g_byte_array_sized_new(name_len); + wifi_agent->ssid->len = name_len; + memcpy(wifi_agent->ssid->data, name, name_len + 1); if (identity) - agent.identity = g_strdup(identity); + wifi_agent->identity = g_strdup(identity); if (passphrase) - agent.passphrase = g_strdup(passphrase); + wifi_agent->passphrase = g_strdup(passphrase); + + gchar *enc_data = NULL; + enc_data = _netconfig_encrypt_passphrase(wifi_agent->passphrase); + + if (!enc_data) { + ERR("Failed to encrypt the passphrase"); + } else { + g_free(wifi_agent->passphrase); + wifi_agent->passphrase = enc_data; + } DBG("Successfully configured for EAP network"); @@ -183,8 +209,10 @@ gboolean handle_set_field(NetConnmanAgent *connman_agent, GVariant *value; gboolean updated = FALSE; gboolean reply = FALSE; + const char *interface_name = NULL; + netconfig_wifi_agent_s *wifi_agent = NULL; - g_return_val_if_fail(connman_agent != NULL, FALSE); + g_return_val_if_fail(connman_agent != NULL, TRUE); DBG("Set agent fields for %s", service); @@ -196,56 +224,100 @@ gboolean handle_set_field(NetConnmanAgent *connman_agent, g_dbus_method_invocation_return_gerror(context, error); g_clear_error(&error); - return reply; + return TRUE; + } + + interface_name = netconfig_get_ifname(service); + if (interface_name == NULL) { + error = g_error_new(G_DBUS_ERROR, + G_DBUS_ERROR_AUTH_FAILED, + CONNMAN_ERROR_INTERFACE ".InvalidService"); + + g_dbus_method_invocation_return_gerror(context, error); + g_clear_error(&error); + + return TRUE; } - __netconfig_agent_clear_fields(); + wifi_agent = __agent_get_data(interface_name); + if (wifi_agent == NULL) { + wifi_agent = g_try_malloc0(sizeof(netconfig_wifi_agent_s)); + if (wifi_agent == NULL) { + error = g_error_new(G_DBUS_ERROR, + G_DBUS_ERROR_AUTH_FAILED, + CONNMAN_ERROR_INTERFACE ".OutOfMemory"); + + g_dbus_method_invocation_return_gerror(context, error); + g_clear_error(&error); + + return TRUE; + } + + g_agent_list = g_slist_append(g_agent_list, wifi_agent); + } + + __agent_clear_fields(wifi_agent); + wifi_agent->interface_name = g_strdup(interface_name); + g_variant_get(fields, "a{sv}", &iter); while (g_variant_iter_loop(iter, "{sv}", &field, &value)) { if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSPHRASE) == 0) { - g_free(agent.passphrase); if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { - agent.passphrase = g_strdup(g_variant_get_string(value, NULL)); + wifi_agent->passphrase = g_strdup(g_variant_get_string(value, NULL)); updated = TRUE; - DBG("Field [%s] - []", field); - } else { - agent.passphrase = NULL; + DBG("Field [%s] - []", (gchar *)field); + + if (wifi_agent->passphrase == NULL) + continue; + + if (netconfig_check_passphrase(service, wifi_agent->passphrase) == FALSE) { + ERR("Invalid passphrase"); + + g_free(wifi_agent->passphrase); + wifi_agent->passphrase = NULL; + + updated = FALSE; + continue; + } + + gchar *enc_data = NULL; + enc_data = _netconfig_encrypt_passphrase(wifi_agent->passphrase); + + if (!enc_data) { + ERR("Failed to encrypt the passphrase"); + continue; + } + + g_free(wifi_agent->passphrase); + wifi_agent->passphrase = enc_data; } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_WPS_PBC) == 0) { - agent.wps_pbc = FALSE; if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING) && g_strcmp0(g_variant_get_string(value, NULL), "enable") == 0) { - agent.wps_pbc = TRUE; + wifi_agent->wps_pbc = TRUE; updated = TRUE; - DBG("Field [%s] - [%d]", field, agent.wps_pbc); + DBG("Field [%s] - [%d]", (gchar *)field, wifi_agent->wps_pbc); } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_WPS_PIN) == 0) { - g_free(agent.wps_pin); - agent.wps_pbc = FALSE; if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { - agent.wps_pin = g_strdup(g_variant_get_string(value, NULL)); + wifi_agent->wps_pin = g_strdup(g_variant_get_string(value, NULL)); updated = TRUE; - DBG("Field [%s] - []", field); - } else { - agent.wps_pin = NULL; + DBG("Field [%s] - [%s]", (gchar *)field, wifi_agent->wps_pin); } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_NAME) == 0) { - g_free(agent.name); if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { - agent.name = g_strdup(g_variant_get_string(value, NULL)); + wifi_agent->name = g_strdup(g_variant_get_string(value, NULL)); updated = TRUE; - DBG("Field [%s] - []", field); - } else { - agent.name = NULL; + DBG("Field [%s] - [%s]", (gchar *)field, wifi_agent->name); } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_SSID) == 0) { - if (agent.ssid != NULL) { - g_byte_array_free(agent.ssid, TRUE); - agent.ssid = NULL; + if (wifi_agent->ssid != NULL) { + g_byte_array_free(wifi_agent->ssid, TRUE); + wifi_agent->ssid = NULL; } if (g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) { @@ -254,63 +326,77 @@ gboolean handle_set_field(NetConnmanAgent *connman_agent, GByteArray *array = g_byte_array_new(); g_variant_get(value, "ay", &iter1); - while(g_variant_iter_loop(iter1, "y", &char_value)) { + while (g_variant_iter_loop(iter1, "y", &char_value)) g_byte_array_append(array, &char_value, 1); - } g_variant_iter_free(iter1); if (array != NULL && (array->len > 0)) { - agent.ssid = g_byte_array_sized_new(array->len); - agent.ssid->len = array->len; - memcpy(agent.ssid->data, array->data, array->len); + wifi_agent->ssid = g_byte_array_sized_new(array->len); + wifi_agent->ssid->len = array->len; + memcpy(wifi_agent->ssid->data, array->data, array->len); updated = TRUE; - DBG("Field [%s] - []", field); + DBG("Field [%s] - []", (gchar *)field); } } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_IDENTITY) == 0) { - g_free(agent.identity); if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { - agent.identity = g_strdup(g_variant_get_string(value, NULL)); + wifi_agent->identity = g_strdup(g_variant_get_string(value, NULL)); + updated = TRUE; + + DBG("Field [%s] - [%s]", (gchar *)field, wifi_agent->identity); + } +#if defined TIZEN_CAPTIVE_PORTAL + } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_USERNAME) == 0) { + if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { + wifi_agent->username = g_strdup(g_variant_get_string(value, NULL)); updated = TRUE; - DBG("Field [%s] - []", field); - } else { - agent.identity = NULL; + DBG("Field [%s] - [%s]", (gchar *)field, wifi_agent->username); } + } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSWORD) == 0) { + if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { + wifi_agent->password = g_strdup(g_variant_get_string(value, NULL)); + updated = TRUE; + + DBG("Field [%s] - [%s]", (gchar *)field, wifi_agent->password); + } +#endif } } + g_variant_iter_free(iter); + if (updated == TRUE) { reply = netconfig_invoke_dbus_method_nonblock(CONNMAN_SERVICE, - service, CONNMAN_SERVICE_INTERFACE, "Connect", NULL, NULL); - if (reply == TRUE) { - g_dbus_method_invocation_return_value (context, NULL); - } else { + service, CONNMAN_SERVICE_INTERFACE, "Connect", + NULL, __netconfig_wifi_connect_reply, + g_strdup(interface_name)); + if (reply != TRUE) { + ERR("Fail to connect Wi-Fi"); + __agent_clear_fields(wifi_agent); error = g_error_new(G_DBUS_ERROR, G_DBUS_ERROR_AUTH_FAILED, CONNMAN_ERROR_INTERFACE ".InvalidArguments"); g_dbus_method_invocation_return_gerror(context, error); g_clear_error(&error); + return TRUE; } } else { + ERR("Fail to connect Wi-Fi"); + __agent_clear_fields(wifi_agent); + error = g_error_new(G_DBUS_ERROR, G_DBUS_ERROR_AUTH_FAILED, CONNMAN_ERROR_INTERFACE ".InvalidArguments"); g_dbus_method_invocation_return_gerror(context, error); g_clear_error(&error); + return TRUE; } - if (reply != TRUE) { - ERR("Fail to connect Wi-Fi"); - - __netconfig_agent_clear_fields(); - } - g_variant_iter_free(iter); - net_connman_agent_complete_set_field(connman_agent, context); - return reply; + return TRUE; } gboolean handle_request_input(NetConnmanAgent *connman_agent, @@ -322,87 +408,133 @@ gboolean handle_request_input(NetConnmanAgent *connman_agent, GVariant *out_table = NULL; gboolean updated = FALSE; GVariantBuilder *builder = NULL; + GError *error = NULL; + const char *interface_name = NULL; + netconfig_wifi_agent_s *wifi_agent = NULL; - g_return_val_if_fail(connman_agent != NULL, FALSE); + g_return_val_if_fail(connman_agent != NULL, TRUE); if (NULL == service) - return FALSE; + return TRUE; DBG("Agent fields requested for service: %s", service); - builder = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}")); + interface_name = netconfig_get_ifname(service); + if (interface_name == NULL) { + error = g_error_new(G_DBUS_ERROR, + G_DBUS_ERROR_AUTH_FAILED, + CONNMAN_ERROR_INTERFACE ".InvalidService"); + + g_dbus_method_invocation_return_gerror(context, error); + g_clear_error(&error); + + return TRUE; + } + + wifi_agent = __agent_get_data(interface_name); + if (wifi_agent == NULL) { + error = g_error_new(G_DBUS_ERROR, + G_DBUS_ERROR_AUTH_FAILED, + CONNMAN_ERROR_INTERFACE ".InvalidService"); + + g_dbus_method_invocation_return_gerror(context, error); + g_clear_error(&error); + + return TRUE; + } + + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_get(fields, "a{sv}", &iter); while (g_variant_iter_loop(iter, "{sv}", &field, &r_value)) { if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSPHRASE) == 0 && - agent.passphrase != NULL) { + wifi_agent->passphrase != NULL) { g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_PASSPHRASE, - g_variant_new_string(agent.passphrase)); + g_variant_new_string(wifi_agent->passphrase)); updated = TRUE; - DBG("Setting [%s] - []", field); + DBG("Setting [%s] - [%s]", field, wifi_agent->passphrase); } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_WPS) == 0 && - (agent.wps_pbc == TRUE || agent.wps_pin != NULL)) { - if (agent.wps_pbc == TRUE) { - // Sending empty string for WPS push button method - g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_WPS, g_variant_new_string("")); + (wifi_agent->wps_pbc == TRUE || wifi_agent->wps_pin != NULL)) { + if (wifi_agent->wps_pbc == TRUE) { + /* Sending empty string for WPS push button method */ + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_WPS, + g_variant_new_string("")); updated = TRUE; DBG("Setting empty string for [%s]", field); - } else if (agent.wps_pin != NULL) { - g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_WPS, g_variant_new_string(agent.wps_pin)); + } else if (wifi_agent->wps_pin != NULL) { + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_WPS, + g_variant_new_string(wifi_agent->wps_pin)); updated = TRUE; - DBG("Setting string [%s] - []", field); + DBG("Setting string [%s] - [%s]", field, wifi_agent->wps_pin); } } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_NAME) == 0 && - agent.name != NULL) { - g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_NAME, g_variant_new_string(agent.name)); + wifi_agent->name != NULL) { + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_NAME, + g_variant_new_string(wifi_agent->name)); updated = TRUE; - DBG("Settings [%s] - []", field); + DBG("Settings [%s] - [%s]", field, wifi_agent->name); } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_SSID) == 0 && - agent.ssid != NULL) { + wifi_agent->ssid != NULL) { int i = 0; GVariantBuilder *builder1 = NULL; - builder1 = g_variant_builder_new (G_VARIANT_TYPE ("ay")); + builder1 = g_variant_builder_new(G_VARIANT_TYPE("ay")); - for (i = 0; i < (agent.ssid->len); i++) { - g_variant_builder_add (builder1, "y", agent.ssid->data[i]); - } + for (i = 0; i < (wifi_agent->ssid->len); i++) + g_variant_builder_add(builder1, "y", wifi_agent->ssid->data[i]); + + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_SSID, + g_variant_builder_end(builder1)); - g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_SSID, g_variant_builder_end(builder1)); - if (builder1 != NULL) - g_variant_builder_unref(builder1); + g_variant_builder_unref(builder1); updated = TRUE; DBG("Settings [%s] - []", field); } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_IDENTITY) == 0 && - agent.identity != NULL) { - g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_IDENTITY, g_variant_new_string(agent.identity)); + wifi_agent->identity != NULL) { + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_IDENTITY, + g_variant_new_string(wifi_agent->identity)); updated = TRUE; - DBG("Settings [%s] - []", field); + DBG("Settings [%s] - [%s]", field, wifi_agent->identity); +#if defined TIZEN_CAPTIVE_PORTAL + } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_USERNAME) == 0 && + wifi_agent->username != NULL) { + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_USERNAME, + g_variant_new_string(wifi_agent->username)); + + updated = TRUE; + DBG("Settings [%s] - [%s]", field, wifi_agent->username); + } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSWORD) == 0 && + wifi_agent->password != NULL) { + g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_PASSWORD, + g_variant_new_string(wifi_agent->password)); + + updated = TRUE; + DBG("Settings [%s] - [%s]", field, wifi_agent->password); +#endif } } out_table = g_variant_new("(@a{sv})", g_variant_builder_end(builder)); - if (builder) - g_variant_builder_unref(builder); + g_variant_builder_unref(builder); g_variant_iter_free(iter); - if (NULL == out_table){ + if (NULL == out_table) { net_connman_agent_complete_request_input(connman_agent, context, out_table); - return FALSE; + return TRUE; } if (updated == TRUE) - g_dbus_method_invocation_return_value (context, out_table); + g_dbus_method_invocation_return_value(context, out_table); else { GError *error = NULL; error = g_error_new(G_DBUS_ERROR, @@ -413,26 +545,23 @@ gboolean handle_request_input(NetConnmanAgent *connman_agent, g_clear_error(&error); } - __netconfig_agent_clear_fields(); - g_variant_unref(out_table); + __agent_clear_fields(wifi_agent); - return updated; + return TRUE; } gboolean handle_report_error(NetConnmanAgent *connman_agent, GDBusMethodInvocation *context, const gchar *service, const gchar *error) { - gboolean ret = TRUE; - - g_return_val_if_fail(connman_agent != NULL, FALSE); + g_return_val_if_fail(connman_agent != NULL, TRUE); net_connman_agent_complete_report_error(connman_agent, context); DBG("Agent error for service[%s] - [%s]", service, error); - // Do something when it failed to make a connection + /* Do something when it failed to make a connection */ - return ret; + return TRUE; } #if defined TIZEN_CAPTIVE_PORTAL @@ -448,7 +577,6 @@ static gboolean is_monitor_notifier_registered = FALSE; #if defined TIZEN_WEARABLE static gboolean is_portal_msg_shown = FALSE; -static guint portal_msg_timer = 0; #endif struct poll_timer_data { @@ -457,8 +585,8 @@ struct poll_timer_data { void* data; }; -static struct poll_timer_data timer_data = - {QUERY_FOR_INTERNET_INTERVAL, 0, NULL}; +static struct poll_timer_data timer_data = { + QUERY_FOR_INTERNET_INTERVAL, 0, NULL}; static gboolean __check_ignore_portal_list(const char * ssid) { @@ -474,7 +602,7 @@ static gboolean __check_ignore_portal_list(const char * ssid) DBG("csc string [%s]", def_str); gchar ** ignore_ap_list = g_strsplit(def_str, ",", 0); ignore_ap_count = g_strv_length(ignore_ap_list); - for(i = 0; i < ignore_ap_count; i++) { + for (i = 0; i < ignore_ap_count; i++) { DBG("[%d] - [%s]", i, ignore_ap_list[i]); if (strncmp(ignore_ap_list[i], ssid, strlen(ssid)) == 0) { g_strfreev(ignore_ap_list); @@ -486,16 +614,18 @@ static gboolean __check_ignore_portal_list(const char * ssid) return FALSE; } -static void __wifi_state_monitor(enum netconfig_wifi_service_state state, - void *user_data); +static void __wifi_state_monitor(wifi_state_notifier_s *notifier, + char *service, wifi_service_state_e state, void *user_data); -static struct netconfig_wifi_state_notifier wifi_state_monitor_notifier = { - .netconfig_wifi_state_changed = __wifi_state_monitor, +static wifi_state_notifier_s wifi_state_monitor_notifier = { + .notifier = NULL, + .service = NULL, + .wifi_state_changed = __wifi_state_monitor, .user_data = NULL, }; -static void __wifi_state_monitor(enum netconfig_wifi_service_state state, - void *user_data) +static void __wifi_state_monitor(wifi_state_notifier_s *notifier, + char *service, wifi_service_state_e state, void *user_data) { DBG("Wi-Fi state: %x", state); @@ -503,7 +633,7 @@ static void __wifi_state_monitor(enum netconfig_wifi_service_state state, return; if (is_monitor_notifier_registered == TRUE) { - netconfig_wifi_state_notifier_unregister(&wifi_state_monitor_notifier); + wifi_state_notifier_unregister(&wifi_state_monitor_notifier); is_monitor_notifier_registered = FALSE; } @@ -534,8 +664,7 @@ static gboolean __netconfig_wifi_portal_login_timeout(gpointer data) if (TRUE == netconfig_get_internet_status()) { if (is_monitor_notifier_registered == TRUE) { - netconfig_wifi_state_notifier_unregister( - &wifi_state_monitor_notifier); + wifi_state_notifier_unregister(&wifi_state_monitor_notifier); is_monitor_notifier_registered = FALSE; } @@ -546,13 +675,12 @@ static gboolean __netconfig_wifi_portal_login_timeout(gpointer data) DBG("Login failed, update ConnMan"); if (is_monitor_notifier_registered == TRUE) { - netconfig_wifi_state_notifier_unregister( - &wifi_state_monitor_notifier); + wifi_state_notifier_unregister(&wifi_state_monitor_notifier); is_monitor_notifier_registered = FALSE; } /* Disconnect and forget the AP */ - service_profile = (char*) netconfig_get_default_profile(); + service_profile = (char *)netconfig_get_default_profile(); if (service_profile && netconfig_is_wifi_profile(service_profile)) { /* Now forget the AP*/ reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE, @@ -565,8 +693,8 @@ static gboolean __netconfig_wifi_portal_login_timeout(gpointer data) ERR("Failed to forget the AP "); } } else { - if (NETCONFIG_WIFI_CONNECTED == - netconfig_wifi_state_get_service_state()) { + if (wifi_state_get_service_state(netconfig_get_default_ifname()) + == NETCONFIG_WIFI_CONNECTED) { /* check Internet availability by sending and receiving data*/ netconfig_check_internet_accessibility(); /* Returning TRUE itself is enough to restart the timer */ @@ -580,18 +708,6 @@ static gboolean __netconfig_wifi_portal_login_timeout(gpointer data) return FALSE; } -#if defined TIZEN_WEARABLE -static gboolean __netconfig_display_portal_msg(gpointer data) -{ - DBG(""); - wc_launch_popup(WC_POPUP_TYPE_CAPTIVE_PORTAL); - - netconfig_stop_timer(&portal_msg_timer); - - return FALSE; -} -#endif - static void __netconfig_wifi_portal_login_timer_start(struct poll_timer_data *data) { @@ -616,11 +732,10 @@ gboolean handle_request_browser(NetConnmanAgent *connman_agent, GDBusMethodInvocation *context, const gchar *service, const gchar *url) { #if defined TIZEN_CAPTIVE_PORTAL - gboolean ret = FALSE; gboolean ignore_portal = FALSE; const char * ssid = NULL; - g_return_val_if_fail(connman_agent != NULL, FALSE); + g_return_val_if_fail(connman_agent != NULL, TRUE); DBG("service[%s] - url[%s]", service, url); @@ -628,38 +743,28 @@ gboolean handle_request_browser(NetConnmanAgent *connman_agent, if (ssid == NULL) { ERR("Connected AP name is NULL!!"); net_connman_agent_complete_request_browser(connman_agent, context); - return FALSE; + return TRUE; } ignore_portal = __check_ignore_portal_list(ssid); - if (ignore_portal == TRUE){ + if (ignore_portal == TRUE) { net_connman_agent_complete_request_browser(connman_agent, context); return TRUE; } /* Register for Wifi state change notifier*/ if (is_monitor_notifier_registered == FALSE) { - netconfig_wifi_state_notifier_register(&wifi_state_monitor_notifier); + wifi_state_notifier_register(&wifi_state_monitor_notifier); is_monitor_notifier_registered = TRUE; } -#if defined TIZEN_WEARABLE - if (is_portal_msg_shown){ - net_connman_agent_complete_request_browser(connman_agent, context); - return TRUE; - } - - is_portal_msg_shown = TRUE; - netconfig_start_timer_seconds(4, __netconfig_display_portal_msg, NULL, &portal_msg_timer); -#else - ret = netconfig_send_notification_to_net_popup(NETCONFIG_ADD_PORTAL_NOTI, ssid); -#endif + netconfig_send_notification_to_net_popup(NETCONFIG_ADD_PORTAL_NOTI, ssid); timer_data.time_elapsed = 0; __netconfig_wifi_portal_login_timer_start(&timer_data); net_connman_agent_complete_request_browser(connman_agent, context); - return ret; + return TRUE; #else GError *error = NULL; error = g_error_new(G_DBUS_ERROR, @@ -669,6 +774,6 @@ gboolean handle_request_browser(NetConnmanAgent *connman_agent, g_dbus_method_invocation_return_gerror(context, error); g_clear_error(&error); - return FALSE; + return TRUE; #endif }