diff options
-rw-r--r-- | src/libwfd.h | 2 | ||||
-rw-r--r-- | src/wpa_parser.c | 28 | ||||
-rw-r--r-- | test/test_wpa.c | 6 |
3 files changed, 31 insertions, 5 deletions
diff --git a/src/libwfd.h b/src/libwfd.h index 6e8795f..529ab35 100644 --- a/src/libwfd.h +++ b/src/libwfd.h @@ -605,10 +605,12 @@ struct wfd_wpa_event { union wfd_wpa_event_payload { struct wfd_wpa_event_ap_sta_connected { char mac[WFD_WPA_EVENT_MAC_STRLEN]; + char iface[WFD_WPA_EVENT_MAC_STRLEN]; } ap_sta_connected; struct wfd_wpa_event_ap_sta_disconnected { char mac[WFD_WPA_EVENT_MAC_STRLEN]; + char iface[WFD_WPA_EVENT_MAC_STRLEN]; } ap_sta_disconnected; struct wfd_wpa_event_p2p_device_found { diff --git a/src/wpa_parser.c b/src/wpa_parser.c index 554e08c..6d25bf8 100644 --- a/src/wpa_parser.c +++ b/src/wpa_parser.c @@ -220,14 +220,26 @@ static int parse_ap_sta_connected(struct wfd_wpa_event *ev, char *tokens, size_t num) { int r; + size_t i; if (num < 1) return -EINVAL; - r = parse_mac(ev->p.ap_sta_connected.mac, tokens); + r = parse_mac(ev->p.ap_sta_connected.iface, tokens); if (r < 0) return r; + for (i = 1; i < num; ++i, tokens += strlen(tokens) + 1) { + if (strncmp(tokens, "p2p_dev_addr=", 13)) + continue; + + r = parse_mac(ev->p.ap_sta_connected.mac, &tokens[13]); + if (r < 0) + return r; + + return 0; + } + return 0; } @@ -235,14 +247,26 @@ static int parse_ap_sta_disconnected(struct wfd_wpa_event *ev, char *tokens, size_t num) { int r; + size_t i; if (num < 1) return -EINVAL; - r = parse_mac(ev->p.ap_sta_disconnected.mac, tokens); + r = parse_mac(ev->p.ap_sta_disconnected.iface, tokens); if (r < 0) return r; + for (i = 1; i < num; ++i, tokens += strlen(tokens) + 1) { + if (strncmp(tokens, "p2p_dev_addr=", 13)) + continue; + + r = parse_mac(ev->p.ap_sta_disconnected.mac, &tokens[13]); + if (r < 0) + return r; + + return 0; + } + return 0; } diff --git a/test/test_wpa.c b/test/test_wpa.c index 86a388e..8cc0ab2 100644 --- a/test/test_wpa.c +++ b/test/test_wpa.c @@ -37,8 +37,8 @@ static void parse(struct wfd_wpa_event *ev, const char *event) static const char *event_list[] = { [WFD_WPA_EVENT_UNKNOWN] = "", - [WFD_WPA_EVENT_AP_STA_CONNECTED] = "AP-STA-CONNECTED 00:00:00:00:00:00", - [WFD_WPA_EVENT_AP_STA_DISCONNECTED] = "AP-STA-DISCONNECTED 00:00:00:00:00:00", + [WFD_WPA_EVENT_AP_STA_CONNECTED] = "AP-STA-CONNECTED 00:00:00:00:00:00 p2p_dev_addr=00:00:00:00:00:00", + [WFD_WPA_EVENT_AP_STA_DISCONNECTED] = "AP-STA-DISCONNECTED 00:00:00:00:00:00 p2p_dev_addr=00:00:00:00:00:00", [WFD_WPA_EVENT_CTRL_EVENT_SCAN_STARTED] = "CTRL-EVENT-SCAN-STARTED", [WFD_WPA_EVENT_CTRL_EVENT_TERMINATING] = "CTRL-EVENT-TERMINATING", [WFD_WPA_EVENT_P2P_DEVICE_FOUND] = "P2P-DEVICE-FOUND 00:00:00:00:00:00 name=some-name", @@ -83,7 +83,7 @@ START_TEST(test_wpa_parser) ck_assert(ev.priority == WFD_WPA_EVENT_P_MSGDUMP); ck_assert(ev.type == WFD_WPA_EVENT_AP_STA_CONNECTED); - parse(&ev, "<4>AP-STA-CONNECTED 0:0:0:0:0:0"); + parse(&ev, "<4>AP-STA-CONNECTED 0:0:0:0:0:0 p2p_dev_addr=ff:ff:ff:ff:ff:ff"); ck_assert(ev.priority == WFD_WPA_EVENT_P_ERROR); ck_assert(ev.type == WFD_WPA_EVENT_AP_STA_CONNECTED); |