MX_FRAME rx_frame;
tL2CAP_APPL_INFO reg_info; /* L2CAP Registration info */
- /* MCB based on the L2CAP's lcid */
- tRFC_MCB* p_rfc_lcid_mcb[MAX_L2CAP_CHANNELS];
bool peer_rx_disabled; /* If true peer sent FCOFF */
uint8_t last_mux; /* Last mux allocated */
uint8_t last_port_index; // Index of last port allocated in rfc_cb.port
extern std::unordered_map<uint32_t /* scn */, uint16_t /* sec_mask */>
rfcomm_security_records;
+/* MCB based on the L2CAP's lcid */
+extern std::unordered_map<uint16_t /* cid */, tRFC_MCB*> rfc_lcid_mcb;
+
/* Timer running on the multiplexor channel while no DLCI connection is open */
#define RFC_MCB_INIT_INACT_TIMER 60 /* in seconds */
*
******************************************************************************/
tRFC_MCB* rfc_find_lcid_mcb(uint16_t lcid) {
- if (lcid - L2CAP_BASE_APPL_CID >= MAX_L2CAP_CHANNELS) {
- RFCOMM_TRACE_ERROR("rfc_find_lcid_mcb LCID:0x%x", lcid);
- return nullptr;
- } else {
- tRFC_MCB* p_mcb = rfc_cb.rfc.p_rfc_lcid_mcb[lcid - L2CAP_BASE_APPL_CID];
- if (p_mcb != nullptr) {
- if (p_mcb->lcid != lcid) {
- LOG(WARNING) << __func__ << "LCID reused lcid=:" << loghex(lcid)
- << ", current_lcid=" << loghex(p_mcb->lcid);
- return nullptr;
- }
+ tRFC_MCB* p_mcb = rfc_lcid_mcb[lcid];
+ if (p_mcb != nullptr) {
+ if (p_mcb->lcid != lcid) {
+ LOG(WARNING) << __func__ << "LCID reused lcid=:" << loghex(lcid)
+ << ", current_lcid=" << loghex(p_mcb->lcid);
+ return nullptr;
}
- return p_mcb;
}
+ return p_mcb;
}
/*******************************************************************************
*
******************************************************************************/
void rfc_save_lcid_mcb(tRFC_MCB* p_mcb, uint16_t lcid) {
- if (lcid < L2CAP_BASE_APPL_CID) {
- LOG(ERROR) << __func__ << ": LCID " << lcid << " is too small";
- return;
- }
- auto mcb_index = static_cast<size_t>(lcid - L2CAP_BASE_APPL_CID);
- if (mcb_index >= MAX_L2CAP_CHANNELS) {
- LOG(ERROR) << __func__ << ": LCID " << lcid << " is too large";
- return;
- }
- rfc_cb.rfc.p_rfc_lcid_mcb[mcb_index] = p_mcb;
+ auto mcb_index = static_cast<size_t>(lcid);
+ rfc_lcid_mcb[mcb_index] = p_mcb;
}