WPS ER: Add ctrl_iface event for learned AP settings

This commit is contained in:
Jouni Malinen 2010-05-27 15:24:45 +03:00 committed by Jouni Malinen
parent 0848668513
commit 15dbf1291a
4 changed files with 49 additions and 2 deletions

View file

@ -86,6 +86,7 @@ extern "C" {
#define WPS_EVENT_ER_AP_REMOVE "WPS-ER-AP-REMOVE "
#define WPS_EVENT_ER_ENROLLEE_ADD "WPS-ER-ENROLLEE-ADD "
#define WPS_EVENT_ER_ENROLLEE_REMOVE "WPS-ER-ENROLLEE-REMOVE "
#define WPS_EVENT_ER_AP_SETTINGS "WPS-ER-AP-SETTINGS "
/* hostapd control interface - fixed message prefixes */
#define WPS_EVENT_PIN_NEEDED "WPS-PIN-NEEDED "

View file

@ -395,7 +395,12 @@ enum wps_event {
/**
* WPS_EV_ER_ENROLLEE_REMOVE - ER: Enrollee removed
*/
WPS_EV_ER_ENROLLEE_REMOVE
WPS_EV_ER_ENROLLEE_REMOVE,
/**
* WPS_EV_ER_AP_SETTINGS - ER: AP Settings learned
*/
WPS_EV_ER_AP_SETTINGS
};
/**
@ -464,6 +469,11 @@ union wps_event_data {
const char *model_number;
const char *serial_number;
} enrollee;
struct wps_event_er_ap_settings {
const u8 *uuid;
const struct wps_credential *cred;
} ap_settings;
};
/**

View file

@ -1393,6 +1393,8 @@ int wps_er_pbc(struct wps_er *er, const u8 *uuid)
static void wps_er_ap_settings_cb(void *ctx, const struct wps_credential *cred)
{
struct wps_er_ap *ap = ctx;
union wps_event_data data;
wpa_printf(MSG_DEBUG, "WPS ER: AP Settings received");
os_free(ap->ap_settings);
ap->ap_settings = os_malloc(sizeof(*cred));
@ -1401,7 +1403,11 @@ static void wps_er_ap_settings_cb(void *ctx, const struct wps_credential *cred)
ap->ap_settings->cred_attr = NULL;
}
/* TODO: send info through ctrl_iface */
os_memset(&data, 0, sizeof(data));
data.ap_settings.uuid = ap->uuid;
data.ap_settings.cred = cred;
ap->er->wps->event_cb(ap->er->wps->cb_ctx, WPS_EV_ER_AP_SETTINGS,
&data);
}

View file

@ -468,6 +468,32 @@ static void wpa_supplicant_wps_event_er_enrollee_remove(
}
static void wpa_supplicant_wps_event_er_ap_settings(
struct wpa_supplicant *wpa_s,
struct wps_event_er_ap_settings *ap_settings)
{
char uuid_str[100];
char key_str[65];
const struct wps_credential *cred = ap_settings->cred;
key_str[0] = '\0';
if (cred->auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK)) {
if (cred->key_len >= 8 && cred->key_len <= 64) {
os_memcpy(key_str, cred->key, cred->key_len);
key_str[cred->key_len] = '\0';
}
}
uuid_bin2str(ap_settings->uuid, uuid_str, sizeof(uuid_str));
/* Use wpa_msg_ctrl to avoid showing the key in debug log */
wpa_msg_ctrl(wpa_s, MSG_INFO, WPS_EVENT_ER_AP_SETTINGS
"uuid=%s ssid=%s auth_type=0x%04x encr_type=0x%04x "
"key=%s",
uuid_str, wpa_ssid_txt(cred->ssid, cred->ssid_len),
cred->auth_type, cred->encr_type, key_str);
}
static void wpa_supplicant_wps_event(void *ctx, enum wps_event event,
union wps_event_data *data)
{
@ -502,6 +528,10 @@ static void wpa_supplicant_wps_event(void *ctx, enum wps_event event,
wpa_supplicant_wps_event_er_enrollee_remove(wpa_s,
&data->enrollee);
break;
case WPS_EV_ER_AP_SETTINGS:
wpa_supplicant_wps_event_er_ap_settings(wpa_s,
&data->ap_settings);
break;
}
}