]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
WPS ER: Add ctrl_iface event for learned AP settings
authorJouni Malinen <jouni.malinen@atheros.com>
Thu, 27 May 2010 12:24:45 +0000 (15:24 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 27 May 2010 12:24:45 +0000 (15:24 +0300)
src/common/wpa_ctrl.h
src/wps/wps.h
src/wps/wps_er.c
wpa_supplicant/wps_supplicant.c

index 95f7db71451b696a19c39688c1aee041d629724a..ac88e8f6c5b48225d3e5f26c9013a1acf93cf6c0 100644 (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 "
index 2ddb81b0bfe91933280665fdf02bb4c6a325ca35..eaecbed0e692947df2fadea75325100b7e461d51 100644 (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;
 };
 
 /**
index e088567ac79b7a4ec207ba519ff374fd8ae235d5..2bd85bf095fb33cccb4fd22a117720e1c0bd2d2f 100644 (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);
 }
 
 
index 28526daad89e53829dd40cfbece4d249f082bf7b..a1b8d1fd8bfba57cb2e0106048325e55e3244862 100644 (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;
        }
 }