summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgsupplicant/supplicant.c22
-rwxr-xr-xinclude/network.h2
-rwxr-xr-xinclude/service.h1
-rwxr-xr-xplugins/wifi.c32
-rwxr-xr-xsrc/network.c16
-rwxr-xr-xsrc/service.c2
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;