P2P: Add callback for provision discovery failure

When provision discovery fails, this new callback will be called
so P2P users can react to the failure.

Signed-off-by: Jayant Sane <jayant.sane@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Jayant Sane 2011-06-12 14:26:22 -07:00 committed by Jouni Malinen
parent 6b56cc2d97
commit 349b213cc8
3 changed files with 28 additions and 0 deletions

View File

@ -2734,6 +2734,10 @@ static void p2p_timeout_prov_disc_req(struct p2p_data *p2p)
p2p->pd_retries--;
p2p_retry_pd(p2p);
} else {
if (p2p->cfg->prov_disc_fail)
p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx,
p2p->pending_pd_devaddr,
P2P_PROV_DISC_TIMEOUT);
p2p_reset_pending_pd(p2p);
}
}

View File

@ -210,6 +210,12 @@ struct p2p_peer_info {
struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
};
enum p2p_prov_disc_status {
P2P_PROV_DISC_SUCCESS,
P2P_PROV_DISC_TIMEOUT,
P2P_PROV_DISC_REJECTED,
};
/**
* struct p2p_config - P2P configuration
*
@ -602,6 +608,21 @@ struct p2p_config {
*/
void (*prov_disc_resp)(void *ctx, const u8 *peer, u16 config_methods);
/**
* prov_disc_fail - Callback on Provision Discovery failure
* @ctx: Callback context from cb_ctx
* @peer: Source address of the response
* @status: Cause of failure, will not be %P2P_PROV_DISC_SUCCESS
*
* This callback is used to indicate either a failure or no response
* to an earlier provision discovery request.
*
* This callback handler can be set to %NULL if provision discovery
* is not used or failures do not need to be indicated.
*/
void (*prov_disc_fail)(void *ctx, const u8 *peer,
enum p2p_prov_disc_status status);
/**
* invitation_process - Optional callback for processing Invitations
* @ctx: Callback context from cb_ctx

View File

@ -247,6 +247,9 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
if (msg.wps_config_methods != dev->req_config_methods) {
wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Peer rejected "
"our Provisioning Discovery Request");
if (p2p->cfg->prov_disc_fail)
p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx, sa,
P2P_PROV_DISC_REJECTED);
p2p_parse_free(&msg);
goto out;
}