From 4cd44da0da86bdef424fca21f3e8a130e3fc4d10 Mon Sep 17 00:00:00 2001 From: Cheney Ni Date: Tue, 3 Nov 2020 15:16:11 +0800 Subject: [PATCH] L2CAP: keep cached peer configuration locally In order to report currect MTU to upper layer while that channel opened, this change keeps remote peer configuration locally. Bug: 171353431 Test: act.py -tc BleCocTest Test: verify basic functions working Tag: #refactor Change-Id: Id4f5f22eb58e6f546278a12b269a700d760b3578 --- stack/l2cap/l2c_csm.cc | 10 ++++------ stack/l2cap/l2c_utils.cc | 7 ++++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/stack/l2cap/l2c_csm.cc b/stack/l2cap/l2c_csm.cc index 0980cb58b..044a50127 100644 --- a/stack/l2cap/l2c_csm.cc +++ b/stack/l2cap/l2c_csm.cc @@ -1033,12 +1033,6 @@ static void l2c_csm_config(tL2C_CCB* p_ccb, uint16_t event, void* p_data) { case L2CEVT_L2CA_CONFIG_RSP: /* Upper layer config rsp */ l2cu_process_our_cfg_rsp(p_ccb, p_cfg); - /* Local config done; clear cached configuration in case reconfig takes - * place later */ - p_ccb->peer_cfg.mtu_present = false; - p_ccb->peer_cfg.flush_to_present = false; - p_ccb->peer_cfg.qos_present = false; - p_ccb->config_done |= IB_CFG_DONE; if (p_ccb->config_done & OB_CFG_DONE) { @@ -1178,6 +1172,10 @@ static void l2c_csm_open(tL2C_CCB* p_ccb, uint16_t event, void* p_data) { tempstate = p_ccb->chnl_state; tempcfgdone = p_ccb->config_done; p_ccb->chnl_state = CST_CONFIG; + // clear cached configuration in case reconfig takes place later + p_ccb->peer_cfg.mtu_present = false; + p_ccb->peer_cfg.flush_to_present = false; + p_ccb->peer_cfg.qos_present = false; p_ccb->config_done &= ~IB_CFG_DONE; alarm_set_on_mloop(p_ccb->l2c_ccb_timer, L2CAP_CHNL_CFG_TIMEOUT_MS, diff --git a/stack/l2cap/l2c_utils.cc b/stack/l2cap/l2c_utils.cc index b7b2bbccb..734d3acab 100644 --- a/stack/l2cap/l2c_utils.cc +++ b/stack/l2cap/l2c_utils.cc @@ -1826,7 +1826,7 @@ uint8_t l2cu_process_peer_cfg_req(tL2C_CCB* p_ccb, tL2CAP_CFG_INFO* p_cfg) { } } /* Reload mtu from a previously accepted config request */ - else if (p_ccb->peer_cfg.mtu_present) { + else if (p_ccb->peer_cfg.mtu_present && !(p_ccb->config_done & IB_CFG_DONE)) { p_cfg->mtu_present = true; p_cfg->mtu = p_ccb->peer_cfg.mtu; } @@ -1843,7 +1843,8 @@ uint8_t l2cu_process_peer_cfg_req(tL2C_CCB* p_ccb, tL2CAP_CFG_INFO* p_cfg) { } } /* Reload flush_to from a previously accepted config request */ - else if (p_ccb->peer_cfg.flush_to_present) { + else if (p_ccb->peer_cfg.flush_to_present && + !(p_ccb->config_done & IB_CFG_DONE)) { p_cfg->flush_to_present = true; p_cfg->flush_to = p_ccb->peer_cfg.flush_to; } @@ -1863,7 +1864,7 @@ uint8_t l2cu_process_peer_cfg_req(tL2C_CCB* p_ccb, tL2CAP_CFG_INFO* p_cfg) { } } /* Reload QOS from a previously accepted config request */ - else if (p_ccb->peer_cfg.qos_present) { + else if (p_ccb->peer_cfg.qos_present && !(p_ccb->config_done & IB_CFG_DONE)) { p_cfg->qos_present = true; p_cfg->qos = p_ccb->peer_cfg.qos; } -- 2.11.0