/******************************************************************************* ** ** Function gap_release_ccb ** ** Description This function releases a CCB. ** ** Returns void ** *******************************************************************************/ static void gap_release_ccb (tGAP_CCB *p_ccb) { UINT16 xx; UINT16 psm = p_ccb->psm; UINT8 service_id = p_ccb->service_id; /* Drop any buffers we may be holding */ p_ccb->rx_queue_size = 0; while (p_ccb->rx_queue._p_first) GKI_freebuf (GKI_dequeue (&p_ccb->rx_queue)); while (p_ccb->tx_queue._p_first) GKI_freebuf (GKI_dequeue (&p_ccb->tx_queue)); p_ccb->con_state = GAP_CCB_STATE_IDLE; /* If no-one else is using the PSM, deregister from L2CAP */ for (xx = 0, p_ccb = gap_cb.conn.ccb_pool; xx < GAP_MAX_CONNECTIONS; xx++, p_ccb++) { if ((p_ccb->con_state != GAP_CCB_STATE_IDLE) && (p_ccb->psm == psm)) return; } /* Free the security record for this PSM */ BTM_SecClrService(service_id); L2CA_DEREGISTER (psm); }
/******************************************************************************* ** ** Function bta_hf_client_del_record ** ** Description Delete SDP record for registered service. ** ** ** Returns void ** *******************************************************************************/ void bta_hf_client_del_record(tBTA_HF_CLIENT_DATA *p_data) { UNUSED(p_data); APPL_TRACE_DEBUG("bta_hf_client_del_record"); if (bta_hf_client_cb.sdp_handle != 0) { SDP_DeleteRecord(bta_hf_client_cb.sdp_handle); bta_hf_client_cb.sdp_handle = 0; BTM_FreeSCN(bta_hf_client_cb.scn); BTM_SecClrService(BTM_SEC_SERVICE_HF_HANDSFREE); bta_sys_remove_uuid(UUID_SERVCLASS_HF_HANDSFREE); } }
/******************************************************************************* ** ** Function bta_ag_del_records ** ** Description Delete SDP records for any registered services. ** ** ** Returns void ** *******************************************************************************/ void bta_ag_del_records(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) { tBTA_AG_SCB *p = &bta_ag_cb.scb[0]; tBTA_SERVICE_MASK services; tBTA_SERVICE_MASK others = 0; int i; UNUSED(p_data); /* get services of all other registered servers */ for (i = 0; i < BTA_AG_NUM_IDX; i++, p++) { if (p_scb == p) { continue; } if (p->in_use && p->dealloc == FALSE) { others |= p->reg_services; } } others >>= BTA_HSP_SERVICE_ID; services = p_scb->reg_services >> BTA_HSP_SERVICE_ID; for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1, others >>= 1) { /* if service registered for this scb and not registered for any other scb */ if (((services & 1) == 1) && ((others & 1) == 0)) { APPL_TRACE_DEBUG("bta_ag_del_records %d", i); if (bta_ag_cb.profile[i].sdp_handle != 0) { SDP_DeleteRecord(bta_ag_cb.profile[i].sdp_handle); bta_ag_cb.profile[i].sdp_handle = 0; } BTM_FreeSCN(bta_ag_cb.profile[i].scn); BTM_SecClrService(bta_ag_sec_id[i]); bta_sys_remove_uuid(bta_ag_uuid[i]); } } }