|
@@ -2364,7 +2364,11 @@ static u8 wpas_invitation_process(void *ctx, const u8 *sa, const u8 *bssid,
|
|
|
goto accept_inv;
|
|
|
}
|
|
|
|
|
|
- if (!wpa_s->conf->persistent_reconnect)
|
|
|
+ if (!is_zero_ether_addr(wpa_s->p2p_auth_invite) &&
|
|
|
+ os_memcmp(sa, wpa_s->p2p_auth_invite, ETH_ALEN) == 0) {
|
|
|
+ wpa_printf(MSG_DEBUG, "P2P: Accept previously initiated "
|
|
|
+ "invitation to re-invoke a persistent group");
|
|
|
+ } else if (!wpa_s->conf->persistent_reconnect)
|
|
|
return P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE;
|
|
|
|
|
|
for (s = wpa_s->conf->ssid; s; s = s->next) {
|
|
@@ -2506,6 +2510,12 @@ static void wpas_invitation_result(void *ctx, int status, const u8 *bssid,
|
|
|
if (wpa_s->pending_invite_ssid_id == -1)
|
|
|
return; /* Invitation to active group */
|
|
|
|
|
|
+ if (status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE) {
|
|
|
+ wpa_printf(MSG_DEBUG, "P2P: Waiting for peer to start another "
|
|
|
+ "invitation exchange to indicate readiness for "
|
|
|
+ "re-invocation");
|
|
|
+ }
|
|
|
+
|
|
|
if (status != P2P_SC_SUCCESS) {
|
|
|
wpas_p2p_remove_pending_group_interface(wpa_s);
|
|
|
return;
|
|
@@ -4630,6 +4640,11 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|
|
int force_freq = 0, oper_freq = 0;
|
|
|
int res;
|
|
|
|
|
|
+ if (peer_addr)
|
|
|
+ os_memcpy(wpa_s->p2p_auth_invite, peer_addr, ETH_ALEN);
|
|
|
+ else
|
|
|
+ os_memset(wpa_s->p2p_auth_invite, 0, ETH_ALEN);
|
|
|
+
|
|
|
wpa_s->p2p_persistent_go_freq = freq;
|
|
|
wpa_s->p2p_go_ht40 = !!ht40;
|
|
|
if (ssid->mode == WPAS_MODE_P2P_GO) {
|