diff options
-rwxr-xr-x | gsupplicant/supplicant.c | 22 | ||||
-rwxr-xr-x | include/network.h | 2 | ||||
-rwxr-xr-x | include/service.h | 1 | ||||
-rwxr-xr-x | plugins/wifi.c | 32 | ||||
-rwxr-xr-x | src/network.c | 16 | ||||
-rwxr-xr-x | src/service.c | 2 |
6 files changed, 70 insertions, 5 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index e9d6b9dc..c596619a 100755 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -4385,7 +4385,11 @@ static void interface_select_network_result(const char *error, err = 0; if (error) { +#if defined TIZEN_EXT + SUPPLICANT_DBG("SelectNetwork errorFreq %s", error); +#else SUPPLICANT_DBG("SelectNetwork error %s", error); +#endif err = parse_supplicant_error(iter); } @@ -4403,9 +4407,15 @@ static void interface_select_network_params(DBusMessageIter *iter, { struct interface_connect_data *data = user_data; GSupplicantInterface *interface = data->interface; +#if defined TIZEN_EXT + GSupplicantSSID *ssid = data->ssid; +#endif dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &interface->network_path); +#if defined TIZEN_EXT + dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &ssid->freq); +#endif } static void interface_add_network_result(const char *error, @@ -4428,11 +4438,23 @@ static void interface_add_network_result(const char *error, g_free(interface->network_path); interface->network_path = g_strdup(path); +#if defined TIZEN_EXT + SUPPLICANT_DBG(".Interface.SelectNetworkFreq"); +#endif + +#if defined TIZEN_EXT + supplicant_dbus_method_call(data->interface->path, + SUPPLICANT_INTERFACE ".Interface", "SelectNetworkFreq", + interface_select_network_params, + interface_select_network_result, data, + interface); +#else supplicant_dbus_method_call(data->interface->path, SUPPLICANT_INTERFACE ".Interface", "SelectNetwork", interface_select_network_params, interface_select_network_result, data, interface); +#endif return; diff --git a/include/network.h b/include/network.h index a6095224..68dc4107 100755 --- a/include/network.h +++ b/include/network.h @@ -58,6 +58,8 @@ enum connman_network_error { #if defined TIZEN_EXT CONNMAN_NETWORK_ERROR_DHCP_FAIL = 5, #endif + CONNMAN_NETWORK_ERROR_BLOCKED = 6, + }; #define CONNMAN_NETWORK_PRIORITY_LOW -100 diff --git a/include/service.h b/include/service.h index fe55d4bc..ff296138 100755 --- a/include/service.h +++ b/include/service.h @@ -83,6 +83,7 @@ enum connman_service_error { CONNMAN_SERVICE_ERROR_LOGIN_FAILED = 5, CONNMAN_SERVICE_ERROR_AUTH_FAILED = 6, CONNMAN_SERVICE_ERROR_INVALID_KEY = 7, + CONNMAN_SERVICE_ERROR_BLOCKED = 8, }; enum connman_service_proxy_method { diff --git a/plugins/wifi.c b/plugins/wifi.c index 76a1d7a0..84d07088 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -133,6 +133,8 @@ struct wifi_data { struct connman_network *scan_pending_network; bool allow_full_scan; #endif + int disconnect_code; + }; #if defined TIZEN_EXT @@ -2168,6 +2170,9 @@ static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network) #if defined TIZEN_EXT ssid->bssid = connman_network_get_bssid(network); #endif +#if defined TIZEN_EXT + ssid->freq = connman_network_get_frequency(network); +#endif if (connman_setting_get_bool("BackgroundScanning")) ssid->bgscan = BGSCAN_DEFAULT; @@ -2658,6 +2663,25 @@ static void interface_state(GSupplicantInterface *interface) network, wifi)) break; +#if defined TIZEN_EXT + wifi->disconnect_code = g_supplicant_interface_get_disconnect_reason(wifi->interface); + DBG("Disconnect Reason code %d", wifi->disconnect_code); +#endif + /* See table 8-36 Reason codes in IEEE Std 802.11 */ + switch (wifi->disconnect_code) { + case 1: /* Unspecified reason */ + /* Let's assume it's because we got blocked */ + + case 6: /* Class 2 frame received from nonauthenticated STA */ + connman_network_set_error(network, + CONNMAN_NETWORK_ERROR_BLOCKED); + break; + + default: + break; + } + + /* We disable the selected network, if not then * wpa_supplicant will loop retrying */ if (g_supplicant_interface_enable_selected_network(interface, @@ -2666,13 +2690,11 @@ static void interface_state(GSupplicantInterface *interface) #if defined TIZEN_EXT int err; - int reason_code = 0; err = g_supplicant_interface_remove_network(wifi->interface); if (err < 0) DBG("Failed to remove network(%d)", err); - reason_code = g_supplicant_interface_get_disconnect_reason(wifi->interface); /* Some of Wi-Fi networks are not comply Wi-Fi specification. * Retry association until its retry count is expired */ @@ -2682,9 +2704,9 @@ static void interface_state(GSupplicantInterface *interface) break; } - if(reason_code > 0){ - DBG("Set disconnect reason code(%d)", reason_code); - connman_network_set_disconnect_reason(network, reason_code); + if(wifi->disconnect_code > 0){ + DBG("Set disconnect reason code(%d)", wifi->disconnect_code); + connman_network_set_disconnect_reason(network, wifi->disconnect_code); } /* To avoid unnecessary repeated association in wpa_supplicant, diff --git a/src/network.c b/src/network.c index 715c8ea9..86876192 100755 --- a/src/network.c +++ b/src/network.c @@ -1403,6 +1403,17 @@ static void set_connect_error(struct connman_network *network) CONNMAN_SERVICE_ERROR_CONNECT_FAILED); } +static void set_blocked_error(struct connman_network *network) +{ + struct connman_service *service; + + service = connman_service_lookup_from_network(network); + + __connman_service_indicate_error(service, + CONNMAN_SERVICE_ERROR_BLOCKED); +} + + #if defined TIZEN_EXT static void set_dhcp_error(struct connman_network *network) { @@ -1477,6 +1488,11 @@ void connman_network_set_error(struct connman_network *network, set_dhcp_error(network); break; #endif + + case CONNMAN_NETWORK_ERROR_BLOCKED: + set_blocked_error(network); + break; + } __connman_network_disconnect(network); diff --git a/src/service.c b/src/service.c index f24f4913..f5611705 100755 --- a/src/service.c +++ b/src/service.c @@ -412,6 +412,8 @@ static const char *error2string(enum connman_service_error error) return "auth-failed"; case CONNMAN_SERVICE_ERROR_INVALID_KEY: return "invalid-key"; + case CONNMAN_SERVICE_ERROR_BLOCKED: + return "blocked"; } return NULL; |