X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Feap_peer%2Feap_wsc.c;h=7c8ad2fdad9854b0b780b6696562ce431a9e907b;hb=4625a47f4bb722710a5e622085ccd2b32ebaf6c9;hp=d4b0dc3262a3db9ed7f991bc9e8ce515e15fe74e;hpb=116654ce24fea104bd0eeb66499948df4d4df3ce;p=wpasupplicant diff --git a/src/eap_peer/eap_wsc.c b/src/eap_peer/eap_wsc.c index d4b0dc3..7c8ad2f 100644 --- a/src/eap_peer/eap_wsc.c +++ b/src/eap_peer/eap_wsc.c @@ -23,11 +23,11 @@ struct eap_wsc_data { - enum { WAIT_START, MSG, FRAG_ACK, WAIT_FRAG_ACK, DONE, FAIL } state; + enum { WAIT_START, MESG, FRAG_ACK, WAIT_FRAG_ACK, DONE, FAIL } state; int registrar; struct wpabuf *in_buf; struct wpabuf *out_buf; - u8 in_op_code, out_op_code; + enum wsc_op_code in_op_code, out_op_code; size_t out_used; size_t fragment_size; struct wps_data *wps; @@ -40,8 +40,8 @@ static const char * eap_wsc_state_txt(int state) switch (state) { case WAIT_START: return "WAIT_START"; - case MSG: - return "MSG"; + case MESG: + return "MESG"; case FRAG_ACK: return "FRAG_ACK"; case WAIT_FRAG_ACK: @@ -65,38 +65,6 @@ static void eap_wsc_state(struct eap_wsc_data *data, int state) } -static int eap_wsc_new_psk_cb(void *ctx, const u8 *mac_addr, const u8 *psk, - size_t psk_len) -{ - wpa_printf(MSG_DEBUG, "EAP-WSC: Received new WPA/WPA2-PSK from WPS for" - " STA " MACSTR, MAC2STR(mac_addr)); - wpa_hexdump_key(MSG_DEBUG, "Per-device PSK", psk, psk_len); - - /* TODO */ - - return 0; -} - - -static void eap_wsc_pin_needed_cb(void *ctx, const u8 *uuid_e, - const struct wps_device_data *dev) -{ - char uuid[40], txt[400]; - int len; - if (uuid_bin2str(uuid_e, uuid, sizeof(uuid))) - return; - wpa_printf(MSG_DEBUG, "EAP-WSC: PIN needed for E-UUID %s", uuid); - len = os_snprintf(txt, sizeof(txt), "WPS-EVENT-PIN-NEEDED " - "%s " MACSTR " [%s|%s|%s|%s|%s|%d-%08X-%d]", - uuid, MAC2STR(dev->mac_addr), dev->device_name, - dev->manufacturer, dev->model_name, - dev->model_number, dev->serial_number, - dev->categ, dev->oui, dev->sub_categ); - if (len > 0 && len < (int) sizeof(txt)) - wpa_printf(MSG_INFO, "%s", txt); -} - - static void * eap_wsc_init(struct eap_sm *sm) { struct eap_wsc_data *data; @@ -131,38 +99,13 @@ static void * eap_wsc_init(struct eap_sm *sm) data = os_zalloc(sizeof(*data)); if (data == NULL) return NULL; - data->state = registrar ? MSG : WAIT_START; + data->state = registrar ? MESG : WAIT_START; data->registrar = registrar; data->wps_ctx = wps; - if (registrar) { - struct wps_registrar_config rcfg; - - wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK; - wps->encr_types = WPS_ENCR_AES | WPS_ENCR_TKIP; - - os_memset(&rcfg, 0, sizeof(rcfg)); - rcfg.new_psk_cb = eap_wsc_new_psk_cb; - rcfg.pin_needed_cb = eap_wsc_pin_needed_cb; - rcfg.cb_ctx = data; - - wps->registrar = wps_registrar_init(wps, &rcfg); - if (wps->registrar == NULL) { - wpa_printf(MSG_DEBUG, "EAP-WSC: Failed to initialize " - "WPS Registrar"); - os_free(wps->network_key); - os_free(wps); - os_free(data); - return NULL; - } - - } - os_memset(&cfg, 0, sizeof(cfg)); - cfg.authenticator = 0; cfg.wps = wps; - cfg.registrar = registrar ? data->wps_ctx->registrar : NULL; - cfg.enrollee_mac_addr = sm->mac_addr; + cfg.registrar = registrar; phase1 = eap_get_config_phase1(sm); if (phase1 == NULL) { @@ -192,10 +135,6 @@ static void * eap_wsc_init(struct eap_sm *sm) return NULL; } - if (registrar && wps) - os_memcpy(wps->uuid, sm->uuid, UUID_LEN); - else - cfg.uuid = sm->uuid; data->wps = wps_init(&cfg); if (data->wps == NULL) { os_free(data); @@ -203,15 +142,9 @@ static void * eap_wsc_init(struct eap_sm *sm) } data->fragment_size = WSC_FRAGMENT_SIZE; - - if (registrar) { - /* Testing */ - wpa_printf(MSG_INFO, "EAP-WSC: Registrar functionality not " - "yet fully supported - using test values"); - u8 uuid_e[UUID_LEN]; - os_memset(uuid_e, 0, UUID_LEN); - wps_registrar_add_pin(data->wps_ctx->registrar, uuid_e, - (const u8 *) "12345670", 8); + if (registrar && cfg.pin) { + wps_registrar_add_pin(data->wps_ctx->registrar, NULL, + cfg.pin, cfg.pin_len, 0); } return data; @@ -224,7 +157,6 @@ static void eap_wsc_deinit(struct eap_sm *sm, void *priv) wpabuf_free(data->in_buf); wpabuf_free(data->out_buf); wps_deinit(data->wps); - wps_registrar_deinit(data->wps_ctx->registrar); os_free(data->wps_ctx->network_key); data->wps_ctx->network_key = NULL; os_free(data); @@ -285,7 +217,7 @@ static struct wpabuf * eap_wsc_build_msg(struct eap_wsc_data *data, eap_wsc_state(data, FAIL); ret->methodState = METHOD_DONE; } else - eap_wsc_state(data, MSG); + eap_wsc_state(data, MESG); } else { wpa_printf(MSG_DEBUG, "EAP-WSC: Sending out %lu bytes " "(%lu more to send)", (unsigned long) send_len, @@ -414,7 +346,7 @@ static struct wpabuf * eap_wsc_process(struct eap_sm *sm, void *priv, return NULL; } wpa_printf(MSG_DEBUG, "EAP-WSC: Fragment acknowledged"); - eap_wsc_state(data, MSG); + eap_wsc_state(data, MESG); return eap_wsc_build_msg(data, ret, id); } @@ -434,7 +366,7 @@ static struct wpabuf * eap_wsc_process(struct eap_sm *sm, void *priv, return NULL; } wpa_printf(MSG_DEBUG, "EAP-WSC: Received start"); - eap_wsc_state(data, MSG); + eap_wsc_state(data, MESG); /* Start message has empty payload, skip processing */ goto send_msg; } else if (op_code == WSC_Start) { @@ -470,18 +402,13 @@ static struct wpabuf * eap_wsc_process(struct eap_sm *sm, void *priv, eap_wsc_state(data, FAIL); break; case WPS_CONTINUE: - eap_wsc_state(data, MSG); + eap_wsc_state(data, MESG); break; case WPS_FAILURE: + case WPS_PENDING: wpa_printf(MSG_DEBUG, "EAP-WSC: WPS processing failed"); eap_wsc_state(data, FAIL); break; - case WPS_PENDING: - wpa_printf(MSG_DEBUG, "EAP-WSC: WPS processing pending"); - ret->ignore = TRUE; - if (data->in_buf == &tmpbuf) - data->in_buf = NULL; - return NULL; } if (data->in_buf != &tmpbuf) @@ -499,7 +426,7 @@ send_msg: data->out_used = 0; } - eap_wsc_state(data, MSG); + eap_wsc_state(data, MESG); return eap_wsc_build_msg(data, ret, id); }