wsc: Refactor slightly in preparation for PIN mode

This commit is contained in:
Denis Kenzior 2017-02-21 16:20:16 -06:00
parent 854bb11c79
commit 1a73854c09
1 changed files with 15 additions and 11 deletions

View File

@ -513,7 +513,7 @@ static void walk_timeout(struct l_timeout *timeout, void *user_data)
wsc_error_walk_time_expired(wsc->pending)); wsc_error_walk_time_expired(wsc->pending));
} }
static bool scan_results(uint32_t wiphy_id, uint32_t ifindex, static bool push_button_scan_results(uint32_t wiphy_id, uint32_t ifindex,
struct l_queue *bss_list, void *userdata) struct l_queue *bss_list, void *userdata)
{ {
struct wsc *wsc = userdata; struct wsc *wsc = userdata;
@ -605,7 +605,8 @@ static bool scan_results(uint32_t wiphy_id, uint32_t ifindex,
l_debug("No PBC APs found, running the scan again"); l_debug("No PBC APs found, running the scan again");
wsc->scan_id = scan_active(device_get_ifindex(wsc->device), wsc->scan_id = scan_active(device_get_ifindex(wsc->device),
wsc->wsc_ies, wsc->wsc_ies_size, wsc->wsc_ies, wsc->wsc_ies_size,
NULL, scan_results, wsc, NULL); NULL, push_button_scan_results,
wsc, NULL);
return false; return false;
} }
@ -626,7 +627,9 @@ session_overlap:
return false; return false;
} }
static bool wsc_start_pushbutton(struct wsc *wsc) static bool wsc_initiate_scan(struct wsc *wsc,
enum wsc_device_password_id dpid,
scan_notify_func_t callback)
{ {
static const uint8_t wfa_oui[] = { 0x00, 0x50, 0xF2 }; static const uint8_t wfa_oui[] = { 0x00, 0x50, 0xF2 };
struct wsc_probe_request req; struct wsc_probe_request req;
@ -659,10 +662,10 @@ static bool wsc_start_pushbutton(struct wsc *wsc)
if (bands & SCAN_BAND_5_GHZ) if (bands & SCAN_BAND_5_GHZ)
req.rf_bands |= WSC_RF_BAND_5_0_GHZ; req.rf_bands |= WSC_RF_BAND_5_0_GHZ;
req.association_state = WSC_ASSOCIATION_STATE_NOT_ASSOCIATED, req.association_state = WSC_ASSOCIATION_STATE_NOT_ASSOCIATED;
req.configuration_error = WSC_CONFIGURATION_ERROR_NO_ERROR, req.configuration_error = WSC_CONFIGURATION_ERROR_NO_ERROR;
req.device_password_id = WSC_DEVICE_PASSWORD_ID_PUSH_BUTTON, req.device_password_id = dpid;
req.request_to_enroll = true, req.request_to_enroll = true;
wsc_data = wsc_build_probe_request(&req, &wsc_data_size); wsc_data = wsc_build_probe_request(&req, &wsc_data_size);
if (!wsc_data) if (!wsc_data)
@ -677,7 +680,7 @@ static bool wsc_start_pushbutton(struct wsc *wsc)
wsc->scan_id = scan_active(device_get_ifindex(wsc->device), wsc->scan_id = scan_active(device_get_ifindex(wsc->device),
wsc->wsc_ies, wsc->wsc_ies_size, wsc->wsc_ies, wsc->wsc_ies_size,
NULL, scan_results, wsc, NULL); NULL, callback, wsc, NULL);
if (!wsc->scan_id) { if (!wsc->scan_id) {
l_free(wsc->wsc_ies); l_free(wsc->wsc_ies);
wsc->wsc_ies = NULL; wsc->wsc_ies = NULL;
@ -685,8 +688,6 @@ static bool wsc_start_pushbutton(struct wsc *wsc)
return false; return false;
} }
wsc->walk_timer = l_timeout_create(WALK_TIME, walk_timeout, wsc, NULL);
return true; return true;
} }
@ -701,10 +702,13 @@ static struct l_dbus_message *wsc_push_button(struct l_dbus *dbus,
if (wsc->pending) if (wsc->pending)
return dbus_error_busy(message); return dbus_error_busy(message);
if (!wsc_start_pushbutton(wsc)) if (!wsc_initiate_scan(wsc, WSC_DEVICE_PASSWORD_ID_PUSH_BUTTON,
push_button_scan_results))
return dbus_error_failed(message); return dbus_error_failed(message);
wsc->walk_timer = l_timeout_create(WALK_TIME, walk_timeout, wsc, NULL);
wsc->pending = l_dbus_message_ref(message); wsc->pending = l_dbus_message_ref(message);
return NULL; return NULL;
} }