static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv);
static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv);
static int wpa_driver_wext_set_auth_alg(void *priv, int auth_alg);
-
+#ifdef ANDROID
+extern int wpa_driver_wext_combo_scan(void *priv,
+ struct wpa_driver_scan_params *params);
+#endif
int wpa_driver_wext_set_auth_param(struct wpa_driver_wext_data *drv,
int idx, u32 value)
drv->assoc_req_ies = NULL;
os_free(drv->assoc_resp_ies);
drv->assoc_resp_ies = NULL;
+#ifdef ANDROID
+ if (!drv->skip_disconnect) {
+ drv->skip_disconnect = 1;
+#endif
wpa_supplicant_event(drv->ctx, EVENT_DISASSOC,
NULL);
-
+#ifdef ANDROID
+ }
+#endif
} else {
+#ifdef ANDROID
+ drv->skip_disconnect = 0;
+#endif
wpa_driver_wext_event_assoc_ies(drv);
wpa_supplicant_event(drv->ctx, EVENT_ASSOC,
NULL);
#ifdef ANDROID
drv->errors = 0;
drv->driver_is_started = TRUE;
+ drv->skip_disconnect = 0;
drv->bgscan_enabled = 0;
#endif /* ANDROID */
const u8 *ssid = params->ssids[0].ssid;
size_t ssid_len = params->ssids[0].ssid_len;
+#ifdef ANDROID
+ if (drv->capa.max_scan_ssids > 1) {
+ ret = wpa_driver_wext_combo_scan(priv, params);
+ goto scan_out;
+ }
+#endif
+
if (ssid_len > IW_ESSID_MAX_SIZE) {
wpa_printf(MSG_DEBUG, "%s: too long SSID (%lu)",
__FUNCTION__, (unsigned long) ssid_len);
ret = -1;
}
+#ifdef ANDROID
+scan_out:
+#endif
/* Not all drivers generate "scan completed" wireless event, so try to
* read results after a timeout. */
timeout = 10;
drv->capa.auth = WPA_DRIVER_AUTH_OPEN |
WPA_DRIVER_AUTH_SHARED |
WPA_DRIVER_AUTH_LEAP;
+#ifdef ANDROID
+ drv->capa.max_scan_ssids = WEXT_CSCAN_AMOUNT;
+#else
drv->capa.max_scan_ssids = 1;
+#endif
wpa_printf(MSG_DEBUG, " capabilities: key_mgmt 0x%x enc 0x%x "
"flags 0x%x",
int value;
wpa_printf(MSG_DEBUG, "%s", __FUNCTION__);
-
+#ifdef ANDROID
+ drv->skip_disconnect = 0;
+#endif
if (drv->cfg80211) {
/*
* Stop cfg80211 from trying to associate before we are done