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

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

Merge "Rootcanal: Implement reject connection request"

parents ada2249a cd2f4242
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ class Link {
    LE_SCAN_RESPONSE,
    PAGE,
    PAGE_RESPONSE,
    PAGE_REJECT,
    RESPONSE,
    SCO,
  };
+18 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include "packets/link_layer/inquiry_view.h"
#include "packets/link_layer/io_capability_view.h"
#include "packets/link_layer/le_advertisement_view.h"
#include "packets/link_layer/page_reject_view.h"
#include "packets/link_layer/page_response_view.h"
#include "packets/link_layer/page_view.h"
#include "packets/link_layer/response_view.h"
@@ -178,6 +179,9 @@ void LinkLayerController::IncomingPacket(LinkLayerPacketView incoming) {
        IncomingPagePacket(incoming);
      }
      break;
    case Link::PacketType::PAGE_REJECT:
      IncomingPageRejectPacket(incoming);
      break;
    case Link::PacketType::PAGE_RESPONSE:
      IncomingPageResponsePacket(incoming);
      break;
@@ -568,6 +572,15 @@ void LinkLayerController::IncomingPagePacket(LinkLayerPacketView incoming) {
                  ->ToVector());
}

void LinkLayerController::IncomingPageRejectPacket(LinkLayerPacketView incoming) {
  LOG_INFO(LOG_TAG, "%s: %s", __func__, incoming.GetSourceAddress().ToString().c_str());
  PageRejectView reject = PageRejectView::GetPageReject(incoming);
  LOG_INFO(LOG_TAG, "%s: Sending CreateConnectionComplete", __func__);
  send_event_(EventPacketBuilder::CreateConnectionCompleteEvent(static_cast<hci::Status>(reject.GetReason()), 0x0eff,
                                                                incoming.GetSourceAddress(), hci::LinkType::ACL, false)
                  ->ToVector());
}

void LinkLayerController::IncomingPageResponsePacket(LinkLayerPacketView incoming) {
  LOG_INFO(LOG_TAG, "%s: %s", __func__, incoming.GetSourceAddress().ToString().c_str());
  uint16_t handle = classic_connections_.CreateConnection(incoming.GetSourceAddress());
@@ -947,6 +960,11 @@ hci::Status LinkLayerController::RejectConnectionRequest(const Address& addr, ui
}

void LinkLayerController::RejectSlaveConnection(const Address& addr, uint8_t reason) {
  std::shared_ptr<LinkLayerPacketBuilder> to_send = LinkLayerPacketBuilder::WrapPageReject(
      PageRejectBuilder::Create(reason), properties_.GetAddress(), addr);
  LOG_INFO(LOG_TAG, "%s sending page reject to %s", __func__, addr.ToString().c_str());
  SendLinkLayerPacket(to_send);

  CHECK(reason >= 0x0d && reason <= 0x0f);
  send_event_(EventPacketBuilder::CreateConnectionCompleteEvent(static_cast<hci::Status>(reason), 0xeff, addr,
                                                                hci::LinkType::ACL, false)
+1 −0
Original line number Diff line number Diff line
@@ -198,6 +198,7 @@ class LinkLayerController {
  void IncomingLeScanPacket(packets::LinkLayerPacketView packet);
  void IncomingLeScanResponsePacket(packets::LinkLayerPacketView packet);
  void IncomingPagePacket(packets::LinkLayerPacketView packet);
  void IncomingPageRejectPacket(packets::LinkLayerPacketView packet);
  void IncomingPageResponsePacket(packets::LinkLayerPacketView packet);
  void IncomingResponsePacket(packets::LinkLayerPacketView packet);

+6 −0
Original line number Diff line number Diff line
@@ -120,6 +120,12 @@ std::shared_ptr<LinkLayerPacketBuilder> LinkLayerPacketBuilder::WrapPage(std::un
      new LinkLayerPacketBuilder(Link::PacketType::PAGE, std::move(page), source, dest));
}

std::shared_ptr<LinkLayerPacketBuilder> LinkLayerPacketBuilder::WrapPageReject(
    std::unique_ptr<PageRejectBuilder> page_reject, const Address& source, const Address& dest) {
  return std::shared_ptr<LinkLayerPacketBuilder>(
      new LinkLayerPacketBuilder(Link::PacketType::PAGE_REJECT, std::move(page_reject), source, dest));
}

std::shared_ptr<LinkLayerPacketBuilder> LinkLayerPacketBuilder::WrapPageResponse(
    std::unique_ptr<PageResponseBuilder> page_response, const Address& source, const Address& dest) {
  return std::shared_ptr<LinkLayerPacketBuilder>(
+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "packets/link_layer/io_capability_negative_response_builder.h"
#include "packets/link_layer/le_advertisement_builder.h"
#include "packets/link_layer/page_builder.h"
#include "packets/link_layer/page_reject_builder.h"
#include "packets/link_layer/page_response_builder.h"
#include "packets/link_layer/response_builder.h"
#include "packets/link_layer/view_forwarder_builder.h"
@@ -72,6 +73,8 @@ class LinkLayerPacketBuilder : PacketBuilder<true> {
      std::unique_ptr<LeAdvertisementBuilder> scan_response, const Address& source, const Address& dest);
  static std::shared_ptr<LinkLayerPacketBuilder> WrapPage(std::unique_ptr<PageBuilder> page, const Address& source,
                                                          const Address& dest);
  static std::shared_ptr<LinkLayerPacketBuilder> WrapPageReject(std::unique_ptr<PageRejectBuilder> page_response,
                                                                const Address& source, const Address& dest);
  static std::shared_ptr<LinkLayerPacketBuilder> WrapPageResponse(std::unique_ptr<PageResponseBuilder> page_response,
                                                                  const Address& source, const Address& dest);
  static std::shared_ptr<LinkLayerPacketBuilder> WrapResponse(const std::unique_ptr<ResponseBuilder> response,
Loading