P2P NFC: Do not try to join peer if both devices are already GO
Send a P2P-NFC-BOTH-GO event to upper layers to determine what to do in case both devices going through NFC connection handover are already operating as a GO. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
201b0f5fa6
commit
74df9ecd4a
4 changed files with 17 additions and 2 deletions
|
@ -150,6 +150,7 @@ extern "C" {
|
||||||
#define P2P_EVENT_FIND_STOPPED "P2P-FIND-STOPPED "
|
#define P2P_EVENT_FIND_STOPPED "P2P-FIND-STOPPED "
|
||||||
#define P2P_EVENT_PERSISTENT_PSK_FAIL "P2P-PERSISTENT-PSK-FAIL id="
|
#define P2P_EVENT_PERSISTENT_PSK_FAIL "P2P-PERSISTENT-PSK-FAIL id="
|
||||||
#define P2P_EVENT_PRESENCE_RESPONSE "P2P-PRESENCE-RESPONSE "
|
#define P2P_EVENT_PRESENCE_RESPONSE "P2P-PRESENCE-RESPONSE "
|
||||||
|
#define P2P_EVENT_NFC_BOTH_GO "P2P-NFC-BOTH-GO "
|
||||||
|
|
||||||
/* parameters: <PMF enabled> <timeout in ms> <Session Information URL> */
|
/* parameters: <PMF enabled> <timeout in ms> <Session Information URL> */
|
||||||
#define ESS_DISASSOC_IMMINENT "ESS-DISASSOC-IMMINENT "
|
#define ESS_DISASSOC_IMMINENT "ESS-DISASSOC-IMMINENT "
|
||||||
|
|
|
@ -4516,7 +4516,9 @@ int p2p_process_nfc_connection_handover(struct p2p_data *p2p,
|
||||||
dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
|
dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peer_go)
|
if (peer_go && p2p->num_groups > 0)
|
||||||
|
params->next_step = BOTH_GO;
|
||||||
|
else if (peer_go)
|
||||||
params->next_step = JOIN_GROUP;
|
params->next_step = JOIN_GROUP;
|
||||||
else if (p2p->num_groups > 0)
|
else if (p2p->num_groups > 0)
|
||||||
params->next_step = AUTH_JOIN;
|
params->next_step = AUTH_JOIN;
|
||||||
|
|
|
@ -1910,7 +1910,8 @@ struct p2p_nfc_params {
|
||||||
size_t p2p_len;
|
size_t p2p_len;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NO_ACTION, JOIN_GROUP, AUTH_JOIN, INIT_GO_NEG, RESP_GO_NEG
|
NO_ACTION, JOIN_GROUP, AUTH_JOIN, INIT_GO_NEG, RESP_GO_NEG,
|
||||||
|
BOTH_GO
|
||||||
} next_step;
|
} next_step;
|
||||||
struct p2p_peer_info *peer;
|
struct p2p_peer_info *peer;
|
||||||
u8 oob_dev_pw[WPS_OOB_PUBKEY_HASH_LEN + 2 +
|
u8 oob_dev_pw[WPS_OOB_PUBKEY_HASH_LEN + 2 +
|
||||||
|
|
|
@ -7212,6 +7212,15 @@ static int wpas_p2p_nfc_connection_handover(struct wpa_supplicant *wpa_s,
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
if (params.next_step == NO_ACTION)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (params.next_step == BOTH_GO) {
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, P2P_EVENT_NFC_BOTH_GO "peer=" MACSTR,
|
||||||
|
MAC2STR(params.peer->p2p_device_addr));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
wpabuf_free(wpa_s->p2p_oob_dev_pw);
|
wpabuf_free(wpa_s->p2p_oob_dev_pw);
|
||||||
wpa_s->p2p_oob_dev_pw = NULL;
|
wpa_s->p2p_oob_dev_pw = NULL;
|
||||||
|
|
||||||
|
@ -7261,6 +7270,8 @@ static int wpas_p2p_nfc_connection_handover(struct wpa_supplicant *wpa_s,
|
||||||
|
|
||||||
switch (params.next_step) {
|
switch (params.next_step) {
|
||||||
case NO_ACTION:
|
case NO_ACTION:
|
||||||
|
case BOTH_GO:
|
||||||
|
/* already covered above */
|
||||||
return 0;
|
return 0;
|
||||||
case JOIN_GROUP:
|
case JOIN_GROUP:
|
||||||
return wpas_p2p_nfc_join_group(wpa_s, ¶ms);
|
return wpas_p2p_nfc_join_group(wpa_s, ¶ms);
|
||||||
|
|
Loading…
Reference in a new issue