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

Commit 31651a87 authored by Myles Watson's avatar Myles Watson Committed by Automerger Merge Worker
Browse files

Merge changes Id82b44ee,Ie2c82bc6,Ic767e28d,I49ef471c,I7d688f0a into main am: 6a689f57

parents 4acdae36 6a689f57
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ constexpr EventCode AclConnectionEvents[] = {
    EventCode::CONNECTION_PACKET_TYPE_CHANGED,
    EventCode::ROLE_CHANGE,
    EventCode::CONNECTION_COMPLETE,
    EventCode::CONNECTION_REQUEST,
    EventCode::AUTHENTICATION_COMPLETE,
    EventCode::READ_CLOCK_OFFSET_COMPLETE,
    EventCode::MODE_CHANGE,
+0 −4
Original line number Diff line number Diff line
@@ -410,10 +410,6 @@ uint16_t AclManager::HACK_GetLeHandle(Address address) {
  return pimpl_->le_impl_->HACK_get_handle(address);
}

void AclManager::HACK_SetNonAclDisconnectCallback(std::function<void(uint16_t, uint8_t)> callback) {
  pimpl_->classic_impl_->HACK_SetNonAclDisconnectCallback(callback);
}

void AclManager::HACK_SetAclTxPriority(uint8_t handle, bool high_priority) {
  CallOn(pimpl_->round_robin_scheduler_, &RoundRobinScheduler::SetLinkPriority, handle, high_priority);
}
+0 −5
Original line number Diff line number Diff line
@@ -172,11 +172,6 @@ class AclManager : public Module {
  virtual uint16_t HACK_GetHandle(const Address address);
  virtual uint16_t HACK_GetLeHandle(const Address address);

  // Hack for the shim to get non-acl disconnect callback. Shim needs to post to
  // their handler!
  virtual void HACK_SetNonAclDisconnectCallback(
      std::function<void(uint16_t /* handle */, uint8_t /* reason */)>);

  virtual void HACK_SetAclTxPriority(uint8_t handle, bool high_priority);

  struct impl;
+6 −44
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "hci/acl_manager/acl_scheduler.h"
#include "hci/acl_manager/assembler.h"
#include "hci/acl_manager/round_robin_scheduler.h"
#include "hci/class_of_device.h"
#include "hci/controller.h"
#include "hci/event_checkers.h"
#include "hci/remote_name_request.h"
@@ -70,6 +71,7 @@ struct classic_impl : public security::ISecurityManagerListener {
    acl_connection_interface_ = hci_layer_->GetAclConnectionInterface(
        handler_->BindOn(this, &classic_impl::on_classic_event),
        handler_->BindOn(this, &classic_impl::on_classic_disconnect),
        handler_->BindOn(this, &classic_impl::on_incoming_connection),
        handler_->BindOn(this, &classic_impl::on_read_remote_version_information));
  }

@@ -85,9 +87,6 @@ struct classic_impl : public security::ISecurityManagerListener {
      case EventCode::CONNECTION_COMPLETE:
        on_connection_complete(event_packet);
        break;
      case EventCode::CONNECTION_REQUEST:
        on_incoming_connection(event_packet);
        break;
      case EventCode::CONNECTION_PACKET_TYPE_CHANGED:
        on_connection_packet_type_changed(event_packet);
        break;
@@ -243,10 +242,7 @@ struct classic_impl : public security::ISecurityManagerListener {
    return connections.send_packet_upward(handle, cb);
  }

  void on_incoming_connection(EventView packet) {
    ConnectionRequestView request = ConnectionRequestView::Create(packet);
    ASSERT(request.IsValid());
    Address address = request.GetBdAddr();
  void on_incoming_connection(Address address, ClassOfDevice cod) {
    if (client_callbacks_ == nullptr) {
      LOG_ERROR("No callbacks to call");
      auto reason = RejectConnectionReason::LIMITED_RESOURCES;
@@ -254,39 +250,15 @@ struct classic_impl : public security::ISecurityManagerListener {
      return;
    }

    switch (request.GetLinkType()) {
      case ConnectionRequestLinkType::SCO:
        client_handler_->CallOn(
            client_callbacks_, &ConnectionCallbacks::HACK_OnScoConnectRequest, address, request.GetClassOfDevice());
        return;

      case ConnectionRequestLinkType::ACL:
        // Need to upstream Cod information when getting connection_request
        client_handler_->CallOn(
            client_callbacks_,
            &ConnectionCallbacks::OnConnectRequest,
            address,
            request.GetClassOfDevice());
        break;

      case ConnectionRequestLinkType::ESCO:
    client_handler_->CallOn(
            client_callbacks_, &ConnectionCallbacks::HACK_OnEscoConnectRequest, address, request.GetClassOfDevice());
        return;

      default:
        LOG_ERROR(
            "Request has unknown ConnectionRequestLinkType %s",
            ConnectionRequestLinkTypeText(request.GetLinkType()).c_str());
        return;
    }
        client_callbacks_, &ConnectionCallbacks::OnConnectRequest, address, cod);

    acl_scheduler_->RegisterPendingIncomingConnection(address);

    if (is_classic_link_already_connected(address)) {
      auto reason = RejectConnectionReason::UNACCEPTABLE_BD_ADDR;
      this->reject_connection(RejectConnectionRequestBuilder::Create(address, reason));
    } else if (should_accept_connection_.Run(address, request.GetClassOfDevice())) {
    } else if (should_accept_connection_.Run(address, cod)) {
      this->accept_connection(address);
    } else {
      auto reason = RejectConnectionReason::LIMITED_RESOURCES;  // TODO: determine reason
@@ -488,10 +460,6 @@ struct classic_impl : public security::ISecurityManagerListener {
          callbacks->OnDisconnection(reason);
        },
        kRemoveConnectionAfterwards);
    // This handle is probably for SCO, so we use the callback workaround.
    if (non_acl_disconnect_callback_ != nullptr) {
      non_acl_disconnect_callback_(handle, static_cast<uint8_t>(reason));
    }
    connections.crash_on_unknown_handle_ = event_also_routes_to_other_receivers;
  }

@@ -800,10 +768,6 @@ struct classic_impl : public security::ISecurityManagerListener {
    return connections.HACK_get_handle(address);
  }

  void HACK_SetNonAclDisconnectCallback(std::function<void(uint16_t, uint8_t)> callback) {
    non_acl_disconnect_callback_ = callback;
  }

  void handle_register_callbacks(ConnectionCallbacks* callbacks, os::Handler* handler) {
    ASSERT(client_callbacks_ == nullptr);
    ASSERT(client_handler_ == nullptr);
@@ -832,8 +796,6 @@ struct classic_impl : public security::ISecurityManagerListener {
  std::unique_ptr<RoleChangeView> delayed_role_change_ = nullptr;

  std::unique_ptr<security::SecurityManager> security_manager_;

  std::function<void(uint16_t, uint8_t)> non_acl_disconnect_callback_;
};

}  // namespace acl_manager
+2 −2
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ class ClassicImplTest : public ::testing::Test {
    bluetooth::common::InitFlags::SetAllForTesting();
    thread_ = new Thread("thread", Thread::Priority::NORMAL);
    handler_ = new Handler(thread_);
    hci_layer_ = new TestHciLayer();
    hci_layer_ = new HciLayerFake();
    controller_ = new testing::MockController();

    EXPECT_CALL(*controller_, GetNumAclPacketBuffers);
@@ -246,7 +246,7 @@ class ClassicImplTest : public ::testing::Test {

  Thread* thread_;
  Handler* handler_;
  TestHciLayer* hci_layer_{nullptr};
  HciLayerFake* hci_layer_{nullptr};
  testing::MockController* controller_;
  acl_manager::RoundRobinScheduler* round_robin_scheduler_{nullptr};

Loading