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

Commit 4b7e46a7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I68ffaacc,I9b0e536a into main

* changes:
  avdt: remove redundant states and functions
  avdt: refactor AvdtpTransportChannel
parents 52ca2acc 1b4c5a4b
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ AvdtpTransportChannel* avdt_ad_tc_tbl_alloc(AvdtpCcb* p_ccb) {

  /* initialize entry */
  p_tbl->peer_mtu = L2CAP_DEFAULT_MTU;
  p_tbl->cfg_flags = 0;
  p_tbl->role = tAVDT_ROLE::AVDT_UNKNOWN;
  p_tbl->ccb_idx = avdt_ccb_to_idx(p_ccb);
  p_tbl->state = AVDT_AD_ST_IDLE;
  return p_tbl;
@@ -297,7 +297,7 @@ void avdt_ad_tc_close_ind(AvdtpTransportChannel* p_tbl) {
  close.old_tc_state = p_tbl->state;
  /* clear avdt_ad_tc_tbl entry */
  p_tbl->state = AVDT_AD_ST_UNUSED;
  p_tbl->cfg_flags = 0;
  p_tbl->role = tAVDT_ROLE::AVDT_UNKNOWN;
  p_tbl->peer_mtu = L2CAP_DEFAULT_MTU;

  /* if signaling channel, notify ccb that channel close */
@@ -356,10 +356,7 @@ void avdt_ad_tc_open_ind(AvdtpTransportChannel* p_tbl) {

    p_ccb = avdt_ccb_by_idx(p_tbl->ccb_idx);
    /* use err_param to indicate the role of connection */
    evt.err_param = static_cast<uint8_t>(tAVDT_ROLE::AVDT_INT);
    if (p_tbl->cfg_flags & AVDT_L2C_CFG_CONN_ACP) {
      evt.err_param = static_cast<uint8_t>(tAVDT_ROLE::AVDT_ACP);
    }
    evt.err_param = static_cast<uint8_t>(p_tbl->role);
    tAVDT_CCB_EVT avdt_ccb_evt;
    avdt_ccb_evt.msg.hdr = evt;
    avdt_ccb_event(p_ccb, AVDT_CCB_LL_OPEN_EVT, &avdt_ccb_evt);
+15 −20
Original line number Diff line number Diff line
@@ -306,13 +306,6 @@ enum {
/* 2 channels(1 media, 1 report) for each SEP and one for signalling */
#define AVDT_NUM_RT_TBL (AVDT_NUM_SEPS * AVDT_CHAN_NUM_TYPES + 1)

/* Adaptation layer number of transport channel table entries - moved to target.h
#define AVDT_NUM_TC_TBL     (AVDT_NUM_SEPS + AVDT_NUM_LINKS) */

/* Configuration flags. AvdtpTransportChannel.cfg_flags */
#define AVDT_L2C_CFG_CONN_INT (1 << 2)
#define AVDT_L2C_CFG_CONN_ACP (1 << 3)

/* "states" used in transport channel table */
enum tTRANSPORT_CHANNEL_STATE : uint8_t {
  AVDT_AD_ST_UNUSED = 0, /* Unused - unallocated */
@@ -321,8 +314,6 @@ enum tTRANSPORT_CHANNEL_STATE : uint8_t {
  AVDT_AD_ST_CONN = 4,   /* Waiting for connection confirm */
  AVDT_AD_ST_CFG = 5,    /* Waiting for configuration complete */
  AVDT_AD_ST_OPEN = 6,   /* Channel opened */
  AVDT_AD_ST_SEC_INT = 7, /* Security process as INT */
  AVDT_AD_ST_SEC_ACP = 8, /* Security process as ACP */
};

inline std::string tc_state_text(uint8_t state) {
@@ -334,8 +325,6 @@ inline std::string tc_state_text(uint8_t state) {
    CASE_RETURN_TEXT(AVDT_AD_ST_CONN);
    CASE_RETURN_TEXT(AVDT_AD_ST_CFG);
    CASE_RETURN_TEXT(AVDT_AD_ST_OPEN);
    CASE_RETURN_TEXT(AVDT_AD_ST_SEC_INT);
    CASE_RETURN_TEXT(AVDT_AD_ST_SEC_ACP);
    default:
      RETURN_UNKNOWN_TYPE_STRING(tTRANSPORT_CHANNEL_STATE, state_);
  }
@@ -677,7 +666,13 @@ private:
class AvdtpTransportChannel {
public:
  AvdtpTransportChannel()
      : peer_mtu(0), my_mtu(0), lcid(0), tcid(0), ccb_idx(0), state(0), cfg_flags(0) {}
      : peer_mtu(0),
        my_mtu(0),
        lcid(0),
        tcid(0),
        ccb_idx(0),
        state(0),
        role(tAVDT_ROLE::AVDT_UNKNOWN) {}

  void Reset() {
    peer_mtu = 0;
@@ -686,7 +681,7 @@ public:
    tcid = 0;
    ccb_idx = 0;
    state = 0;
    cfg_flags = 0;
    role = tAVDT_ROLE::AVDT_UNKNOWN;
  }

  uint16_t peer_mtu;  // L2CAP MTU of the peer device
@@ -695,7 +690,7 @@ public:
  uint8_t tcid;       // Transport channel ID
  uint8_t ccb_idx;    // Channel control block for with this transport channel
  uint8_t state;      // Transport channel state
  uint8_t cfg_flags;  // L2CAP configuration flags
  tAVDT_ROLE role;    // Role for the establishment of the AVDTP signaling channel
};

/**
+7 −64
Original line number Diff line number Diff line
@@ -69,61 +69,6 @@ const tL2CAP_APPL_INFO avdt_l2c_appl = {avdt_l2c_connect_ind_cback,
                                        NULL,
                                        NULL};

/*******************************************************************************
 *
 * Function         avdt_l2c_sec_check_complete_term
 *
 * Description      The function called when Security Manager finishes
 *                  verification of the service side connection
 *
 * Returns          void
 *
 ******************************************************************************/
static void avdt_l2c_sec_check_complete_term(const RawAddress& bd_addr) {
  AvdtpCcb* p_ccb = NULL;
  AvdtpTransportChannel* p_tbl;

  p_ccb = avdt_ccb_by_bd(bd_addr);
  p_tbl = avdt_ad_tc_tbl_by_st(AVDT_CHAN_SIG, p_ccb, AVDT_AD_ST_SEC_ACP);
  if (p_tbl == NULL) {
    log::warn("Adaptation layer transport channel table is NULL");
    return;
  }

  /* store idx in LCID table, store LCID in routing table */
  avdtp_cb.ad.lcid_tbl[p_tbl->lcid] = avdt_ad_tc_tbl_to_idx(p_tbl);
  avdtp_cb.ad.rt_tbl[avdt_ccb_to_idx(p_ccb)][p_tbl->tcid].lcid = p_tbl->lcid;
  log::verbose("lcid: 0x{:04x}, bd_addr: {}", p_tbl->lcid, bd_addr);

  /* transition to configuration state */
  p_tbl->state = AVDT_AD_ST_CFG;
}

/*******************************************************************************
 *
 * Function         avdt_l2c_sec_check_complete_orig
 *
 * Description      The function called when Security Manager finishes
 *                  verification of the service side connection
 *
 * Returns          void
 *
 ******************************************************************************/
static void avdt_l2c_sec_check_complete_orig(const RawAddress& bd_addr) {
  AvdtpCcb* p_ccb = NULL;
  AvdtpTransportChannel* p_tbl;

  p_ccb = avdt_ccb_by_bd(bd_addr);
  p_tbl = avdt_ad_tc_tbl_by_st(AVDT_CHAN_SIG, p_ccb, AVDT_AD_ST_SEC_INT);
  if (p_tbl == NULL) {
    log::warn("Adaptation layer transport channel table is NULL");
    return;
  }

  log::verbose("lcid: 0x{:04x}, bd_addr: {}", p_tbl->lcid, bd_addr);
  /* set channel state */
  p_tbl->state = AVDT_AD_ST_CFG;
}
/*******************************************************************************
 *
 * Function         avdt_l2c_connect_ind_cback
@@ -162,8 +107,8 @@ void avdt_l2c_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid, uint16
      p_tbl->my_mtu = kAvdtpMtu;
      p_tbl->tcid = AVDT_CHAN_SIG;
      p_tbl->lcid = lcid;
      p_tbl->state = AVDT_AD_ST_SEC_ACP;
      p_tbl->cfg_flags = AVDT_L2C_CFG_CONN_ACP;
      p_tbl->state = AVDT_AD_ST_CFG;
      p_tbl->role = tAVDT_ROLE::AVDT_ACP;

      if (interop_match_addr(INTEROP_2MBPS_LINK_ONLY, &bd_addr)) {
        // Disable 3DH packets for AVDT ACL to improve sensitivity on HS
@@ -171,8 +116,9 @@ void avdt_l2c_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid, uint16
                bd_addr, (acl_get_supported_packet_types() | HCI_PKT_TYPES_MASK_NO_3_DH1 |
                          HCI_PKT_TYPES_MASK_NO_3_DH3 | HCI_PKT_TYPES_MASK_NO_3_DH5));
      }
      /* Assume security check is complete */
      avdt_l2c_sec_check_complete_term(p_ccb->peer_addr);
      /* store idx in LCID table, store LCID in routing table */
      avdtp_cb.ad.lcid_tbl[p_tbl->lcid] = avdt_ad_tc_tbl_to_idx(p_tbl);
      avdtp_cb.ad.rt_tbl[avdt_ccb_to_idx(p_ccb)][p_tbl->tcid].lcid = p_tbl->lcid;
      return;
    }
  } else {
@@ -284,9 +230,9 @@ void avdt_l2c_connect_cfm_cback(uint16_t lcid, tL2CAP_CONN result) {
    return;
  }

  p_tbl->state = AVDT_AD_ST_SEC_INT;
  p_tbl->state = AVDT_AD_ST_CFG;
  p_tbl->lcid = lcid;
  p_tbl->cfg_flags = AVDT_L2C_CFG_CONN_INT;
  p_tbl->role = tAVDT_ROLE::AVDT_INT;

  if (interop_match_addr(INTEROP_2MBPS_LINK_ONLY, (const RawAddress*)&p_ccb->peer_addr)) {
    // Disable 3DH packets for AVDT ACL to improve sensitivity on HS
@@ -294,9 +240,6 @@ void avdt_l2c_connect_cfm_cback(uint16_t lcid, tL2CAP_CONN result) {
            p_ccb->peer_addr, (acl_get_supported_packet_types() | HCI_PKT_TYPES_MASK_NO_3_DH1 |
                               HCI_PKT_TYPES_MASK_NO_3_DH3 | HCI_PKT_TYPES_MASK_NO_3_DH5));
  }

  /* Assume security check is complete */
  avdt_l2c_sec_check_complete_orig(p_ccb->peer_addr);
}

/*******************************************************************************