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

Commit 794c2f38 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

L2cap shim: Send config callback before register dequeue

We want to let the client (AVCT) know the MTU first.  They might need to
send something without MTU available.

On AVCT side, initialize MTU as minimal L2cap MTU for now.

Bug: 179071567
Test: Speaker
Tag: #stability
Change-Id: I654c5fd302096876a3b6d245d173a735468ba949
parent 820ad0ec
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -178,18 +178,10 @@ struct ClassicDynamicChannelHelper {
    channel->RegisterOnCloseCallback(GetGdShimHandler()->BindOnceOn(
        this, &ClassicDynamicChannelHelper::on_channel_close, cid_token));

    channel->GetQueueUpEnd()->RegisterDequeue(
        GetGdShimHandler(),
        bluetooth::common::Bind(&ClassicDynamicChannelHelper::on_incoming_data,
                                bluetooth::common::Unretained(this),
                                cid_token));

    channel_enqueue_buffer_[cid_token] = std::make_unique<
        bluetooth::os::EnqueueBuffer<bluetooth::packet::BasePacketBuilder>>(
        channel->GetQueueUpEnd());

    channels_[cid_token] = std::move(channel);

    if (initiator_local) {
      do_in_main_thread(
          FROM_HERE, base::Bind(appl_info_.pL2CA_ConnectCfm_Cb, cid_token, 0));
@@ -211,6 +203,14 @@ struct ClassicDynamicChannelHelper {
                                              cid_token, L2CAP_INITIATOR_LOCAL,
                                              base::Unretained(&cfg_info)));
    }

    channel->GetQueueUpEnd()->RegisterDequeue(
        GetGdShimHandler(),
        bluetooth::common::Bind(&ClassicDynamicChannelHelper::on_incoming_data,
                                bluetooth::common::Unretained(this),
                                cid_token));

    channels_[cid_token] = std::move(channel);
  }

  void on_incoming_data(uint16_t cid_token) {
+1 −0
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ tAVCT_LCB* avct_lcb_alloc(const RawAddress& bd_addr) {
      p_lcb->peer_addr = bd_addr;
      AVCT_TRACE_DEBUG("avct_lcb_alloc %d", p_lcb->allocated);
      p_lcb->tx_q = fixed_queue_new(SIZE_MAX);
      p_lcb->peer_mtu = L2CAP_LE_MIN_MTU;
      break;
    }
  }