component/bt: stop to initiate AVDTP connection on failure of A2DP service discovery
In opening state of AVDTP connection, if SDP client fails to get valid A2DP service record\ from peer SDP server, then do not initiate AVDTP connection request
This commit is contained in:
parent
01994059e2
commit
da4108dd1e
3 changed files with 33 additions and 1 deletions
|
@ -143,6 +143,7 @@ const tBTA_AV_SACT bta_av_a2d_action[] = {
|
||||||
bta_av_role_res, /* BTA_AV_ROLE_RES */
|
bta_av_role_res, /* BTA_AV_ROLE_RES */
|
||||||
bta_av_delay_co, /* BTA_AV_DELAY_CO */
|
bta_av_delay_co, /* BTA_AV_DELAY_CO */
|
||||||
bta_av_open_at_inc, /* BTA_AV_OPEN_AT_INC */
|
bta_av_open_at_inc, /* BTA_AV_OPEN_AT_INC */
|
||||||
|
bta_av_open_fail_sdp, /* BTA_AV_OPEN_FAIL_SDP */
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1060,6 +1061,35 @@ void bta_av_free_sdb(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data)
|
||||||
utl_freebuf((void **) &p_scb->p_disc_db);
|
utl_freebuf((void **) &p_scb->p_disc_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
** Function bta_av_open_fail_sdp
|
||||||
|
**
|
||||||
|
** Description report BTA_AV_OPEN_EVT with service discovery failed status
|
||||||
|
**
|
||||||
|
** Returns void
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
void bta_av_open_fail_sdp(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data)
|
||||||
|
{
|
||||||
|
tBTA_AV_OPEN open;
|
||||||
|
|
||||||
|
bdcpy(open.bd_addr, p_scb->peer_addr);
|
||||||
|
open.chnl = p_scb->chnl;
|
||||||
|
open.hndl = p_scb->hndl;
|
||||||
|
open.status = BTA_AV_FAIL_SDP;
|
||||||
|
|
||||||
|
if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC ) {
|
||||||
|
open.sep = AVDT_TSEP_SNK;
|
||||||
|
} else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK ) {
|
||||||
|
open.sep = AVDT_TSEP_SRC;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV *) &open);
|
||||||
|
|
||||||
|
UNUSED(p_data);
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
** Function bta_av_config_ind
|
** Function bta_av_config_ind
|
||||||
|
|
|
@ -94,6 +94,7 @@ enum {
|
||||||
BTA_AV_ROLE_RES,
|
BTA_AV_ROLE_RES,
|
||||||
BTA_AV_DELAY_CO,
|
BTA_AV_DELAY_CO,
|
||||||
BTA_AV_OPEN_AT_INC,
|
BTA_AV_OPEN_AT_INC,
|
||||||
|
BTA_AV_OPEN_FAIL_SDP,
|
||||||
BTA_AV_NUM_SACTIONS
|
BTA_AV_NUM_SACTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -199,7 +200,7 @@ static const UINT8 bta_av_sst_opening[][BTA_AV_NUM_COLS] = {
|
||||||
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||||
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||||
/* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||||
/* SDP_DISC_FAIL_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_OPEN_FAIL_SDP, BTA_AV_INIT_SST },
|
||||||
/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||||
/* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
/* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST },
|
||||||
/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST },
|
||||||
|
|
|
@ -661,6 +661,7 @@ extern void bta_av_switch_role (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
extern void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
extern void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
extern void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
extern void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
extern void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
extern void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
|
extern void bta_av_open_fail_sdp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
|
|
||||||
/* ssm action functions - vdp specific */
|
/* ssm action functions - vdp specific */
|
||||||
extern void bta_av_do_disc_vdp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
extern void bta_av_do_disc_vdp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data);
|
||||||
|
|
Loading…
Reference in a new issue