char *netpath;
gboolean created;
enum supplicant_state state;
- gboolean noscan;
+ gboolean scanning;
GSList *scan_results;
struct iw_range *range;
gboolean disconnecting;
return;
noscan:
- if (task->noscan == FALSE)
+ if (task->scanning == TRUE) {
connman_device_set_scanning(task->device, FALSE);
+ task->scanning = FALSE;
+ }
}
static void scan_results_reply(DBusPendingCall *call, void *user_data)
dbus_message_unref(reply);
noscan:
- if (task->noscan == FALSE)
+ if (task->scanning == TRUE) {
connman_device_set_scanning(task->device, FALSE);
+ task->scanning = FALSE;
+ }
}
static void scan_results_available(struct supplicant_task *task)
goto done;
}
- if (task->noscan == FALSE)
- connman_device_set_scanning(task->device, TRUE);
-
if (call == NULL) {
connman_error("D-Bus connection not available");
goto done;
}
+ if (task->scanning == TRUE)
+ connman_device_set_scanning(task->device, TRUE);
+
dbus_pending_call_set_notify(call, scan_results_reply, task, NULL);
done:
const char *address, *security, *passphrase;
const void *ssid;
unsigned int ssid_len;
+ int err;
address = connman_network_get_string(task->network, "Address");
security = connman_network_get_string(task->network, "WiFi.Security");
set_network(task, ssid, ssid_len, address, security, passphrase);
- enable_network(task);
+ err = enable_network(task);
+ if (err < 0)
+ return err;
return -EINPROGRESS;
}
if (state == WPA_INVALID)
return;
- task->state = state;
-
- switch (task->state) {
- case WPA_SCANNING:
- task->noscan = TRUE;
- connman_device_set_scanning(task->device, TRUE);
- break;
- case WPA_ASSOCIATING:
- case WPA_ASSOCIATED:
- case WPA_4WAY_HANDSHAKE:
- case WPA_GROUP_HANDSHAKE:
- task->noscan = TRUE;
- break;
- case WPA_COMPLETED:
- case WPA_DISCONNECTED:
- task->noscan = FALSE;
- break;
- case WPA_INACTIVE:
- task->noscan = FALSE;
+ if (task->scanning == TRUE && state != WPA_SCANNING) {
connman_device_set_scanning(task->device, FALSE);
- break;
- case WPA_INVALID:
- break;
+ task->scanning = FALSE;
}
+ task->state = state;
+
if (task->network == NULL)
return;
/* carrier on */
connman_network_set_connected(task->network, TRUE);
- connman_device_set_scanning(task->device, FALSE);
break;
case WPA_DISCONNECTED:
disable_network(task);
+ /* carrier off */
+ connman_network_set_connected(task->network, FALSE);
+
if (task->disconnecting == TRUE) {
- connman_network_set_connected(task->network, FALSE);
connman_network_unref(task->network);
task->disconnecting = FALSE;
task->pending_network = NULL;
task_connect(task);
}
- } else {
- /* carrier off */
- connman_network_set_connected(task->network, FALSE);
- connman_device_set_scanning(task->device, FALSE);
}
break;
case WPA_INACTIVE:
remove_network(task);
+ connman_network_set_connected(task->network, FALSE);
+
if (task->disconnecting == TRUE) {
- connman_network_set_connected(task->network, FALSE);
connman_network_unref(task->network);
task->disconnecting = FALSE;
task->device = connman_device_ref(device);
task->created = FALSE;
- task->noscan = FALSE;
+ task->scanning = FALSE;
task->state = WPA_INVALID;
task->disconnecting = FALSE;
task->pending_network = NULL;
break;
}
+ task->scanning = TRUE;
+
err = initiate_scan(task);
+ if (err < 0) {
+ task->scanning = FALSE;
+ return err;
+ }
+
+ connman_device_set_scanning(task->device, TRUE);
return 0;
}