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

Commit 4ccf635b authored by Chris Manton's avatar Chris Manton
Browse files

Log class of device on connection request

Bug: 328500473
Test: atest net_test_main_shim
Test: atest net_test_stack_btm
Flag: EXEMPT, Logging

Change-Id: If4e1c71dfc50b3af03b510ffc59594f02713b3b1
parent e7552cef
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -23,11 +23,6 @@
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <vector>

#include "common/numbers.h"
#include "common/strings.h"
#include "os/log.h"

namespace bluetooth {
namespace hci {
+8 −3
Original line number Diff line number Diff line
@@ -1625,12 +1625,17 @@ void shim::legacy::Acl::OnConnectSuccess(
void shim::legacy::Acl::OnConnectRequest(hci::Address address,
                                         hci::ClassOfDevice cod) {
  const RawAddress bd_addr = ToRawAddress(address);
  const DEV_CLASS dev_class = ToDevClass(cod);

  TRY_POSTING_ON_MAIN(acl_interface_.connection.classic.on_connect_request,
                      bd_addr, cod);
  LOG_DEBUG("Received connect request remote:%s",
            ADDRESS_TO_LOGGABLE_CSTR(address));
  BTM_LogHistory(kBtmLogTag, ToRawAddress(address), "Connection request");
  LOG_DEBUG("Received connect request remote:%s gd_cod:%s legacy_dev_class:%s",
            ADDRESS_TO_LOGGABLE_CSTR(address), cod.ToString().c_str(),
            dev_class_text(dev_class).c_str());
  BTM_LogHistory(kBtmLogTag, ToRawAddress(address), "Connection request",
                 base::StringPrintf("gd_cod:%s legacy_dev_class:%s",
                                    cod.ToString().c_str(),
                                    dev_class_text(dev_class).c_str()));
}

void shim::legacy::Acl::OnConnectFail(hci::Address address,
+8 −0
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@

#include "common/init_flags.h"
#include "hci/address_with_type.h"
#include "hci/class_of_device.h"
#include "osi/include/allocator.h"
#include "packet/raw_builder.h"
#include "stack/include/bt_dev_class.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/hci_error_code.h"
#include "stack/include/hci_mode.h"
@@ -251,6 +253,12 @@ inline bool IsPacketFlushable(const BT_HDR* p_buf) {
  return ToPacketData<const HciDataPreamble>(p_buf)->IsFlushable();
}

inline DEV_CLASS ToDevClass(const hci::ClassOfDevice& cod) {
  DEV_CLASS dc;
  dc[0] = cod.cod[2], dc[1] = cod.cod[1], dc[2] = cod.cod[0];
  return dc;
}

namespace debug {

inline void DumpBtHdr(const BT_HDR* p_buf, const char* token) {
+61 −50
Original line number Diff line number Diff line
@@ -32,10 +32,8 @@
#include "hal/hci_hal.h"
#include "hci/acl_manager.h"
#include "hci/acl_manager/classic_acl_connection.h"
#include "hci/acl_manager/connection_callbacks.h"
#include "hci/acl_manager/connection_management_callbacks.h"
#include "hci/acl_manager/le_acl_connection.h"
#include "hci/acl_manager/le_connection_callbacks.h"
#include "hci/acl_manager/le_connection_management_callbacks.h"
#include "hci/acl_manager_mock.h"
#include "hci/address.h"
@@ -53,19 +51,16 @@
#include "main/shim/le_advertising_manager.h"
#include "main/shim/utils.h"
#include "main/shim/le_scanning_manager.h"
#include "main/shim/utils.h"
#include "os/handler.h"
#include "os/mock_queue.h"
#include "os/queue.h"
#include "os/thread.h"
#include "packet/packet_view.h"
#include "stack/btm/btm_int_types.h"
#include "stack/btm/btm_sec_cb.h"
#include "stack/include/acl_hci_link_interface.h"
#include "stack/include/ble_acl_interface.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/bt_types.h"
#include "stack/include/hci_error_code.h"
#include "stack/include/sec_hci_link_interface.h"
#include "stack/l2cap/l2c_int.h"
#include "test/common/jni_thread.h"
#include "test/common/main_handler.h"
@@ -95,6 +90,8 @@ struct bluetooth::hci::LeScanningManager::impl
    : public bluetooth::hci::LeAddressManagerCallback {};

namespace {
const hci::Address kAddress = {{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}};
const hci::ClassOfDevice kCod = {{0x11, 0x22, 0x33}};
constexpr double kMaxAbsoluteError = .0000001;
constexpr double kTicksInMs = 20479.375;
constexpr double kTicksInSec = 20.479375;
@@ -169,7 +166,6 @@ void mock_link_classic_on_read_remote_extended_features_complete(
    uint16_t handle, uint8_t current_page_number, uint8_t max_page_number,
    uint64_t features) {}

const shim::legacy::acl_interface_t GetMockAclInterface() {
shim::legacy::acl_interface_t acl_interface{
    .on_send_data_upwards = mock_on_send_data_upwards,
    .on_packets_completed = mock_on_packets_completed,
@@ -178,6 +174,7 @@ const shim::legacy::acl_interface_t GetMockAclInterface() {
    .connection.classic.on_failed = mock_connection_classic_on_failed,
    .connection.classic.on_disconnected =
        mock_connection_classic_on_disconnected,
    .connection.classic.on_connect_request = nullptr,

    .connection.le.on_connected = mock_connection_le_on_connected,
    .connection.le.on_failed = mock_connection_le_on_failed,
@@ -213,6 +210,8 @@ const shim::legacy::acl_interface_t GetMockAclInterface() {
    .link.le.on_data_length_change = nullptr,
    .link.le.on_read_remote_version_information_complete = nullptr,
};

const shim::legacy::acl_interface_t& GetMockAclInterface() {
  return acl_interface;
}

@@ -772,12 +771,23 @@ TEST_F(MainShimTest, DumpConnectionHistory) {
  acl->DumpConnectionHistory(STDOUT_FILENO);
}

TEST_F(MainShimTest, OnConnectRequest) {
  acl_interface.connection.classic.on_connect_request =
      [](const RawAddress& bda, const hci::ClassOfDevice& cod) {
        ASSERT_STREQ(kAddress.ToString().c_str(), bda.ToString().c_str());
        ASSERT_STREQ(kCod.ToString().c_str(), cod.ToString().c_str());
      };
  auto acl = MakeAcl();
  acl->OnConnectRequest(kAddress, kCod);
}

void DumpsysNeighbor(int fd);
TEST_F(MainShimTest, DumpsysNeighbor) {
  btm_cb.neighbor = {};

  btm_cb.neighbor.inquiry_history_->Push({
      .status = tBTM_INQUIRY_CMPL::CANCELED,
      .hci_status = HCI_SUCCESS,
      .num_resp = 45,
      .resp_type = {20, 30, 40},
      .start_time_ms = 0,
@@ -785,6 +795,7 @@ TEST_F(MainShimTest, DumpsysNeighbor) {

  btm_cb.neighbor.inquiry_history_->Push({
      .status = tBTM_INQUIRY_CMPL::CANCELED,
      .hci_status = HCI_SUCCESS,
      .num_resp = 123,
      .resp_type = {50, 60, 70},
      .start_time_ms = -1,
+5 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <array>
#include <cstddef>
#include <cstdint>
#include <sstream>

constexpr size_t kDevClassLength = 3;
typedef std::array<uint8_t, kDevClassLength> DEV_CLASS; /* Device class */
@@ -121,16 +122,14 @@ inline constexpr DEV_CLASS kDevClassUnclassified = {
    (pd)[0] = (sv) >> 8;                                \
  }

#include <sstream>
inline std::string dev_class_text(const DEV_CLASS& dev_class) {
  std::ostringstream oss;
  uint8_t mj, mn;
  uint16_t sv;
  BTM_COD_MINOR_CLASS(mn, dev_class);
  BTM_COD_MAJOR_CLASS(mj, dev_class);
  uint8_t mj, mn;
  BTM_COD_SERVICE_CLASS(sv, dev_class);
  oss << std::to_string(mj) << "-" << std::to_string(mn) << "-"
      << std::to_string(sv);
  BTM_COD_MAJOR_CLASS(mj, dev_class);
  BTM_COD_MINOR_CLASS(mn, dev_class);
  oss << std::hex << (int)sv << "-" << (int)mj << "-" << (int)mn;
  return oss.str();
}

Loading