Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b867200 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

L2cap user: Use ConfigCfm_Cb as channel open indicator

When the user receives ConfigCfm_Cb, it's guaranteed that ConfigInd_Cb
is received with correct option enforced.

Bug: 159815595
Tag: #refactor
Test: compile & verify basic functions working
Change-Id: I6de12f1ba6e9612f6a84b399e7fc984a7f3c3c72
parent 80356116
Loading
Loading
Loading
Loading
+2 −21
Original line number Diff line number Diff line
@@ -219,15 +219,9 @@ void avct_l2c_config_cfm_cback(uint16_t lcid, uint16_t result) {
    if (p_lcb->ch_state == AVCT_CH_CFG) {
      /* if result successful */
      if (result == L2CAP_CFG_OK) {
        /* update flags */
        p_lcb->ch_flags |= AVCT_L2C_CFG_CFM_DONE;

        /* if configuration complete */
        if (p_lcb->ch_flags & AVCT_L2C_CFG_IND_DONE) {
        p_lcb->ch_state = AVCT_CH_OPEN;
        avct_lcb_event(p_lcb, AVCT_LCB_LL_OPEN_EVT, NULL);
      }
      }
      /* else failure */
      else {
        AVCT_TRACE_DEBUG(
@@ -268,19 +262,6 @@ void avct_l2c_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg) {
    } else {
      p_lcb->peer_mtu = L2CAP_DEFAULT_MTU;
    }

    /* if first config ind */
    if ((p_lcb->ch_flags & AVCT_L2C_CFG_IND_DONE) == 0) {
      /* update flags */
      p_lcb->ch_flags |= AVCT_L2C_CFG_IND_DONE;

      /* if configuration complete */
      if (p_lcb->ch_flags & AVCT_L2C_CFG_CFM_DONE) {
        p_lcb->ch_state = AVCT_CH_OPEN;
        avct_lcb_event(p_lcb, AVCT_LCB_LL_OPEN_EVT, NULL);
      }
    }
    AVCT_TRACE_DEBUG("ch_state cfi: %d ", p_lcb->ch_state);
  }
}

+2 −20
Original line number Diff line number Diff line
@@ -157,15 +157,9 @@ void avct_l2c_br_config_cfm_cback(uint16_t lcid, uint16_t result) {

  /* if result successful */
  if (result == L2CAP_CFG_OK) {
    /* update flags */
    p_lcb->ch_flags |= AVCT_L2C_CFG_CFM_DONE;

    /* if configuration complete */
    if (p_lcb->ch_flags & AVCT_L2C_CFG_IND_DONE) {
    p_lcb->ch_state = AVCT_CH_OPEN;
    avct_bcb_event(p_lcb, AVCT_LCB_LL_OPEN_EVT, NULL);
  }
  }
  /* else failure */
  else {
    /* store result value */
@@ -205,18 +199,6 @@ void avct_l2c_br_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg) {
  }

  AVCT_TRACE_DEBUG("%s peer_mtu:%d use:%d", __func__, p_lcb->peer_mtu, max_mtu);

  /* if first config ind */
  if ((p_lcb->ch_flags & AVCT_L2C_CFG_IND_DONE) == 0) {
    /* update flags */
    p_lcb->ch_flags |= AVCT_L2C_CFG_IND_DONE;

    /* if configuration complete */
    if (p_lcb->ch_flags & AVCT_L2C_CFG_CFM_DONE) {
      p_lcb->ch_state = AVCT_CH_OPEN;
      avct_bcb_event(p_lcb, AVCT_LCB_LL_OPEN_EVT, NULL);
    }
  }
}

/*******************************************************************************
+1 −18
Original line number Diff line number Diff line
@@ -311,14 +311,8 @@ void avdt_l2c_config_cfm_cback(uint16_t lcid, uint16_t result) {
    if (p_tbl->state == AVDT_AD_ST_CFG) {
      /* if result successful */
      if (result == L2CAP_CONN_OK) {
        /* update cfg_flags */
        p_tbl->cfg_flags |= AVDT_L2C_CFG_CFM_DONE;

        /* if configuration complete */
        if (p_tbl->cfg_flags & AVDT_L2C_CFG_IND_DONE) {
        avdt_ad_tc_open_ind(p_tbl);
      }
      }
      /* else failure */
      else {
        /* Send L2CAP disconnect req */
@@ -354,17 +348,6 @@ void avdt_l2c_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg) {
    }
    AVDT_TRACE_DEBUG("%s: peer_mtu: %d, lcid: %d", __func__, p_tbl->peer_mtu,
                     lcid);

    /* if first config ind */
    if ((p_tbl->cfg_flags & AVDT_L2C_CFG_IND_DONE) == 0) {
      /* update cfg_flags */
      p_tbl->cfg_flags |= AVDT_L2C_CFG_IND_DONE;

      /* if configuration complete */
      if (p_tbl->cfg_flags & AVDT_L2C_CFG_CFM_DONE) {
        avdt_ad_tc_open_ind(p_tbl);
      }
    }
  }
}

+8 −37
Original line number Diff line number Diff line
@@ -198,32 +198,7 @@ static void bnep_connect_cfm(uint16_t l2cap_cid, uint16_t result) {
 *
 ******************************************************************************/
static void bnep_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) {
  tBNEP_CONN* p_bcb;

  /* Find CCB based on CID */
  p_bcb = bnepu_find_bcb_by_cid(l2cap_cid);
  if (p_bcb == NULL) {
    BNEP_TRACE_WARNING("BNEP - Rcvd L2CAP cfg ind, unknown CID: 0x%x",
                       l2cap_cid);
    return;
  }

  BNEP_TRACE_EVENT("BNEP - Rcvd cfg ind, CID: 0x%x", l2cap_cid);

  p_bcb->con_flags |= BNEP_FLAGS_HIS_CFG_DONE;

  if (p_bcb->con_flags & BNEP_FLAGS_MY_CFG_DONE) {
    p_bcb->con_state = BNEP_STATE_SEC_CHECKING;

    /* Start timer waiting for setup or response */
    alarm_set_on_mloop(p_bcb->conn_timer, BNEP_HOST_TIMEOUT_MS,
                       bnep_conn_timer_timeout, p_bcb);

    if (p_bcb->con_flags & BNEP_FLAGS_IS_ORIG) {
      bnep_sec_check_complete(&p_bcb->rem_bda, BT_TRANSPORT_BR_EDR, p_bcb,
                              BTM_SUCCESS);
    }
  }
  // No-op here. We are not interested in their MTU.
}

/*******************************************************************************
@@ -252,9 +227,6 @@ static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t result) {

  /* For now, always accept configuration from the other side */
  if (result == L2CAP_CFG_OK) {
    p_bcb->con_flags |= BNEP_FLAGS_MY_CFG_DONE;

    if (p_bcb->con_flags & BNEP_FLAGS_HIS_CFG_DONE) {
    p_bcb->con_state = BNEP_STATE_SEC_CHECKING;

    /* Start timer waiting for setup or response */
@@ -265,7 +237,6 @@ static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t result) {
      bnep_sec_check_complete(&p_bcb->rem_bda, BT_TRANSPORT_BR_EDR, p_bcb,
                              BTM_SUCCESS);
    }
    }
  } else {
    /* Tell the upper layer, if there is a callback */
    if ((p_bcb->con_flags & BNEP_FLAGS_IS_ORIG) && (bnep_cb.p_conn_state_cb)) {
+1 −5
Original line number Diff line number Diff line
@@ -768,10 +768,6 @@ static void gap_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) {
    p_ccb->rem_mtu_size = local_mtu_size;
  } else
    p_ccb->rem_mtu_size = p_cfg->mtu;

  p_ccb->con_flags |= GAP_CCB_FLAGS_HIS_CFG_DONE;

  gap_checks_con_flags(p_ccb);
}

/*******************************************************************************
@@ -793,7 +789,7 @@ static void gap_config_cfm(uint16_t l2cap_cid, uint16_t result) {

  if (result == L2CAP_CFG_OK) {
    p_ccb->con_flags |= GAP_CCB_FLAGS_MY_CFG_DONE;

    p_ccb->con_flags |= GAP_CCB_FLAGS_HIS_CFG_DONE;
    gap_checks_con_flags(p_ccb);
  } else {
    p_ccb->p_callback(p_ccb->gap_handle, GAP_EVT_CONN_CLOSED, nullptr);
Loading