WPS ER: Add more AP information into the ctrl_interface message
This allow wpa_gui to show AP BSSID, WPS State (configured/unconfigured), and primary device type.
This commit is contained in:
parent
c3016248f4
commit
e694b34474
4 changed files with 55 additions and 14 deletions
|
@ -413,6 +413,7 @@ union wps_event_data {
|
||||||
|
|
||||||
struct wps_event_er_ap {
|
struct wps_event_er_ap {
|
||||||
const u8 *uuid;
|
const u8 *uuid;
|
||||||
|
const u8 *mac_addr;
|
||||||
const char *friendly_name;
|
const char *friendly_name;
|
||||||
const char *manufacturer;
|
const char *manufacturer;
|
||||||
const char *manufacturer_url;
|
const char *manufacturer_url;
|
||||||
|
@ -422,6 +423,8 @@ union wps_event_data {
|
||||||
const char *model_url;
|
const char *model_url;
|
||||||
const char *serial_number;
|
const char *serial_number;
|
||||||
const char *upc;
|
const char *upc;
|
||||||
|
const u8 *pri_dev_type;
|
||||||
|
u8 wps_state;
|
||||||
} ap;
|
} ap;
|
||||||
|
|
||||||
struct wps_event_er_enrollee {
|
struct wps_event_er_enrollee {
|
||||||
|
|
|
@ -68,6 +68,7 @@ struct wps_er_ap {
|
||||||
u8 uuid[WPS_UUID_LEN];
|
u8 uuid[WPS_UUID_LEN];
|
||||||
u8 pri_dev_type[8];
|
u8 pri_dev_type[8];
|
||||||
u8 wps_state;
|
u8 wps_state;
|
||||||
|
u8 mac_addr[ETH_ALEN];
|
||||||
char *friendly_name;
|
char *friendly_name;
|
||||||
char *manufacturer;
|
char *manufacturer;
|
||||||
char *manufacturer_url;
|
char *manufacturer_url;
|
||||||
|
@ -246,6 +247,9 @@ static void wps_er_ap_event(struct wps_context *wps, struct wps_er_ap *ap,
|
||||||
evap->model_url = ap->model_url;
|
evap->model_url = ap->model_url;
|
||||||
evap->serial_number = ap->serial_number;
|
evap->serial_number = ap->serial_number;
|
||||||
evap->upc = ap->upc;
|
evap->upc = ap->upc;
|
||||||
|
evap->pri_dev_type = ap->pri_dev_type;
|
||||||
|
evap->wps_state = ap->wps_state;
|
||||||
|
evap->mac_addr = ap->mac_addr;
|
||||||
wps->event_cb(wps->cb_ctx, event, &data);
|
wps->event_cb(wps->cb_ctx, event, &data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,6 +400,8 @@ static void wps_er_ap_get_m1(struct wps_er_ap *ap, struct wpabuf *m1)
|
||||||
os_memcpy(ap->pri_dev_type, attr.primary_dev_type, 8);
|
os_memcpy(ap->pri_dev_type, attr.primary_dev_type, 8);
|
||||||
if (attr.wps_state)
|
if (attr.wps_state)
|
||||||
ap->wps_state = *attr.wps_state;
|
ap->wps_state = *attr.wps_state;
|
||||||
|
if (attr.mac_addr)
|
||||||
|
os_memcpy(ap->mac_addr, attr.mac_addr, ETH_ALEN);
|
||||||
|
|
||||||
wps_er_subscribe(ap);
|
wps_er_subscribe(ap);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ enum peer_type {
|
||||||
PEER_TYPE_AP_WPS,
|
PEER_TYPE_AP_WPS,
|
||||||
PEER_TYPE_WPS_PIN_NEEDED,
|
PEER_TYPE_WPS_PIN_NEEDED,
|
||||||
PEER_TYPE_WPS_ER_AP,
|
PEER_TYPE_WPS_ER_AP,
|
||||||
|
PEER_TYPE_WPS_ER_AP_UNCONFIGURED,
|
||||||
PEER_TYPE_WPS_ER_ENROLLEE
|
PEER_TYPE_WPS_ER_ENROLLEE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -117,6 +118,9 @@ void Peers::context_menu(const QPoint &pos)
|
||||||
case PEER_TYPE_WPS_ER_AP:
|
case PEER_TYPE_WPS_ER_AP:
|
||||||
title = tr("ER: WPS AP");
|
title = tr("ER: WPS AP");
|
||||||
break;
|
break;
|
||||||
|
case PEER_TYPE_WPS_ER_AP_UNCONFIGURED:
|
||||||
|
title = tr("ER: WPS AP (Unconfigured)");
|
||||||
|
break;
|
||||||
case PEER_TYPE_WPS_ER_ENROLLEE:
|
case PEER_TYPE_WPS_ER_ENROLLEE:
|
||||||
title = tr("ER: WPS Enrollee");
|
title = tr("ER: WPS Enrollee");
|
||||||
break;
|
break;
|
||||||
|
@ -456,26 +460,40 @@ void Peers::event_notify(WpaMsg msg)
|
||||||
|
|
||||||
if (text.startsWith(WPS_EVENT_ER_AP_ADD)) {
|
if (text.startsWith(WPS_EVENT_ER_AP_ADD)) {
|
||||||
/*
|
/*
|
||||||
* WPS-ER-AP-ADD 87654321-9abc-def0-1234-56789abc0002|
|
* WPS-ER-AP-ADD 87654321-9abc-def0-1234-56789abc0002
|
||||||
* Very friendly name|Company|Long description of the model|
|
* 02:11:22:33:44:55 pri_dev_type=6-0050F204-1 wps_state=1
|
||||||
|
* |Very friendly name|Company|Long description of the model|
|
||||||
* WAP|http://w1.fi/|http://w1.fi/hostapd/
|
* WAP|http://w1.fi/|http://w1.fi/hostapd/
|
||||||
*/
|
*/
|
||||||
int pos = text.indexOf(' ');
|
QStringList items = text.split(' ');
|
||||||
|
if (items.size() < 5)
|
||||||
|
return;
|
||||||
|
QString uuid = items[1];
|
||||||
|
QString addr = items[2];
|
||||||
|
QString pri_dev_type = items[3];
|
||||||
|
int wps_state = items[4].mid(10).toInt();
|
||||||
|
|
||||||
|
int pos = text.indexOf('|');
|
||||||
if (pos < 0)
|
if (pos < 0)
|
||||||
return;
|
return;
|
||||||
QStringList items = text.mid(pos + 1).split('|');
|
items = text.mid(pos + 1).split('|');
|
||||||
if (items.size() < 2)
|
if (items.size() < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QStandardItem *item = find_uuid(items[0]);
|
QStandardItem *item = find_uuid(uuid);
|
||||||
if (item)
|
if (item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
item = new QStandardItem(*ap_icon, items[1]);
|
item = new QStandardItem(*ap_icon, items[0]);
|
||||||
if (item) {
|
if (item) {
|
||||||
item->setData(items[0], peer_role_uuid);
|
item->setData(uuid, peer_role_uuid);
|
||||||
item->setData(PEER_TYPE_WPS_ER_AP, peer_role_type);
|
item->setData(addr, peer_role_address);
|
||||||
item->setToolTip(items.join(QString("\n")));
|
item->setData(wps_state == 2 ? PEER_TYPE_WPS_ER_AP:
|
||||||
|
PEER_TYPE_WPS_ER_AP_UNCONFIGURED,
|
||||||
|
peer_role_type);
|
||||||
|
item->setToolTip(addr + QString("\n") +
|
||||||
|
pri_dev_type + QString("\n") +
|
||||||
|
items.join(QString("\n")));
|
||||||
model.appendRow(item);
|
model.appendRow(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,8 +512,11 @@ void Peers::event_notify(WpaMsg msg)
|
||||||
peer_role_uuid, items[1]);
|
peer_role_uuid, items[1]);
|
||||||
for (int i = 0; i < lst.size(); i++) {
|
for (int i = 0; i < lst.size(); i++) {
|
||||||
QStandardItem *item = model.itemFromIndex(lst[i]);
|
QStandardItem *item = model.itemFromIndex(lst[i]);
|
||||||
if (item && item->data(peer_role_type).toInt() ==
|
if (item &&
|
||||||
PEER_TYPE_WPS_ER_AP)
|
(item->data(peer_role_type).toInt() ==
|
||||||
|
PEER_TYPE_WPS_ER_AP ||
|
||||||
|
item->data(peer_role_type).toInt() ==
|
||||||
|
PEER_TYPE_WPS_ER_AP_UNCONFIGURED))
|
||||||
model.removeRow(lst[i].row());
|
model.removeRow(lst[i].row());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -414,9 +414,20 @@ static void wpa_supplicant_wps_event_er_ap_add(struct wpa_supplicant *wpa_s,
|
||||||
struct wps_event_er_ap *ap)
|
struct wps_event_er_ap *ap)
|
||||||
{
|
{
|
||||||
char uuid_str[100];
|
char uuid_str[100];
|
||||||
|
char dev_type[20];
|
||||||
|
|
||||||
uuid_bin2str(ap->uuid, uuid_str, sizeof(uuid_str));
|
uuid_bin2str(ap->uuid, uuid_str, sizeof(uuid_str));
|
||||||
wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_ER_AP_ADD "%s|%s|%s|%s|%s|%s|%s",
|
if (ap->pri_dev_type)
|
||||||
uuid_str,
|
os_snprintf(dev_type, sizeof(dev_type), "%u-%08X-%u",
|
||||||
|
WPA_GET_BE16(ap->pri_dev_type),
|
||||||
|
WPA_GET_BE32(ap->pri_dev_type + 2),
|
||||||
|
WPA_GET_BE16(ap->pri_dev_type + 6));
|
||||||
|
else
|
||||||
|
dev_type[0] = '\0';
|
||||||
|
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_ER_AP_ADD "%s " MACSTR
|
||||||
|
" pri_dev_type=%s wps_state=%d |%s|%s|%s|%s|%s|%s|",
|
||||||
|
uuid_str, MAC2STR(ap->mac_addr), dev_type, ap->wps_state,
|
||||||
ap->friendly_name ? ap->friendly_name : "",
|
ap->friendly_name ? ap->friendly_name : "",
|
||||||
ap->manufacturer ? ap->manufacturer : "",
|
ap->manufacturer ? ap->manufacturer : "",
|
||||||
ap->model_description ? ap->model_description : "",
|
ap->model_description ? ap->model_description : "",
|
||||||
|
|
Loading…
Reference in a new issue