summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libwfd.h2
-rw-r--r--src/wpa_parser.c28
-rw-r--r--test/test_wpa.c6
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);