|
@@ -446,6 +446,22 @@ void p2p_process_invitation_resp(struct p2p_data *p2p, const u8 *sa,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (*msg.status == P2P_SC_FAIL_NO_COMMON_CHANNELS &&
|
|
|
+ p2p->retry_invite_req &&
|
|
|
+ p2p_channel_random_social(&p2p->cfg->channels, &p2p->op_reg_class,
|
|
|
+ &p2p->op_channel) == 0) {
|
|
|
+ p2p->retry_invite_req = 0;
|
|
|
+ p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
|
|
|
+ p2p_set_state(p2p, P2P_INVITE);
|
|
|
+ p2p_dbg(p2p, "Resend Invitation Request setting op_class %u channel %u as operating channel",
|
|
|
+ p2p->op_reg_class, p2p->op_channel);
|
|
|
+ p2p_invite_send(p2p, p2p->invite_peer, p2p->invite_go_dev_addr,
|
|
|
+ p2p->invite_dev_pw_id);
|
|
|
+ p2p_parse_free(&msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ p2p->retry_invite_req = 0;
|
|
|
+
|
|
|
if (!msg.channel_list && *msg.status == P2P_SC_SUCCESS) {
|
|
|
p2p_dbg(p2p, "Mandatory Channel List attribute missing in Invitation Response from "
|
|
|
MACSTR, MAC2STR(sa));
|
|
@@ -607,6 +623,8 @@ int p2p_invite(struct p2p_data *p2p, const u8 *peer, enum p2p_invite_role role,
|
|
|
dev_pw_id);
|
|
|
}
|
|
|
p2p->invite_dev_pw_id = dev_pw_id;
|
|
|
+ p2p->retry_invite_req = role == P2P_INVITE_ROLE_GO &&
|
|
|
+ persistent_group && !force_freq;
|
|
|
|
|
|
dev = p2p_get_device(p2p, peer);
|
|
|
if (dev == NULL || (dev->listen_freq <= 0 && dev->oper_freq <= 0 &&
|