WPS ER: Fix Op-Code for WSC_{ACK,NACK,Done}

When using UPnP transport, the Op-Code is not included, but the WPS
frame processing will need this. Generate a matching Op-Code based
on the message type.
This commit is contained in:
Jouni Malinen 2009-11-13 22:40:27 +02:00
parent ed835e539b
commit 7ec2e26ddf

View file

@ -847,13 +847,13 @@ static void wps_er_sta_send_msg(struct wps_er_sta *sta, struct wpabuf *msg)
}
static void wps_er_sta_process(struct wps_er_sta *sta, struct wpabuf *msg)
static void wps_er_sta_process(struct wps_er_sta *sta, struct wpabuf *msg,
enum wsc_op_code op_code)
{
enum wps_process_res res;
res = wps_process_msg(sta->wps, WSC_MSG, msg);
res = wps_process_msg(sta->wps, op_code, msg);
if (res == WPS_CONTINUE) {
enum wsc_op_code op_code;
struct wpabuf *next = wps_get_msg(sta->wps, &op_code);
if (next)
wps_er_sta_send_msg(sta, next);
@ -877,7 +877,7 @@ static void wps_er_sta_start(struct wps_er_sta *sta, struct wpabuf *msg)
if (sta->wps == NULL)
return;
wps_er_sta_process(sta, msg);
wps_er_sta_process(sta, msg, WSC_MSG);
}
@ -902,8 +902,23 @@ static void wps_er_process_wlanevent_eap(struct wps_er_ap *ap, const u8 *addr,
if (attr.msg_type && *attr.msg_type == WPS_M1)
wps_er_sta_start(sta, msg);
else if (sta->wps)
wps_er_sta_process(sta, msg);
else if (sta->wps) {
enum wsc_op_code op_code = WSC_MSG;
if (attr.msg_type) {
switch (*attr.msg_type) {
case WPS_WSC_ACK:
op_code = WSC_ACK;
break;
case WPS_WSC_NACK:
op_code = WSC_NACK;
break;
case WPS_WSC_DONE:
op_code = WSC_Done;
break;
}
}
wps_er_sta_process(sta, msg, op_code);
}
}