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

Commit 95dea37a authored by Chris Manton's avatar Chris Manton
Browse files

Add RawAddress standard array access

Usefull for communicating to rust

Bug: 163134718
Tag: #refactor
Test: gd/cert/run

Change-Id: I7304009e5b0623aedb1109a6ed5bcac395289c5e
parent 473c9136
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <base/strings/stringprintf.h>
#include <stdint.h>
#include <algorithm>
#include <array>
#include <vector>

static_assert(sizeof(RawAddress) == 6, "RawAddress must be 6 bytes long!");
@@ -33,12 +34,22 @@ RawAddress::RawAddress(const uint8_t (&addr)[6]) {
  std::copy(addr, addr + kLength, address);
}

RawAddress::RawAddress(const std::array<uint8_t, kLength> mac) {
  std::copy(mac.begin(), mac.end(), address);
}

std::string RawAddress::ToString() const {
  return base::StringPrintf("%02x:%02x:%02x:%02x:%02x:%02x", address[0],
                            address[1], address[2], address[3], address[4],
                            address[5]);
}

std::array<uint8_t, RawAddress::kLength> RawAddress::ToArray() const {
  std::array<uint8_t, kLength> mac;
  std::copy(std::begin(address), std::end(address), std::begin(mac));
  return mac;
}

bool RawAddress::FromString(const std::string& from, RawAddress& to) {
  RawAddress new_addr;
  if (from.length() != 17) return false;
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ class RawAddress final {

  RawAddress() = default;
  RawAddress(const uint8_t (&addr)[kLength]);
  RawAddress(const std::array<uint8_t, kLength> array);

  bool operator<(const RawAddress& rhs) const {
    return (std::memcmp(address, rhs.address, sizeof(address)) < 0);
@@ -56,6 +57,8 @@ class RawAddress final {
  // Returns the number of copied octets - should be always RawAddress::kLength
  size_t FromOctets(const uint8_t* from);

  std::array<uint8_t, kLength> ToArray() const;

  static bool IsValidAddress(const std::string& address);

  static const RawAddress kEmpty;  // 00:00:00:00:00:00
+11 −0
Original line number Diff line number Diff line
@@ -187,3 +187,14 @@ TEST(RawAddressTest, BdAddrFromString) {
  const RawAddress result1 = {{0xab, 0x01, 0x4c, 0xd5, 0x21, 0x9f}};
  EXPECT_EQ(0, memcmp(&addr, &result1, sizeof(addr)));
}

TEST(RawAddressTest, BdAddrFromArray) {
  std::array<uint8_t, 6> mac = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
  RawAddress bdaddr(mac);

  std::string ret = bdaddr.ToString();
  ASSERT_STREQ("11:22:33:44:55:66", ret.c_str());

  std::array<uint8_t, 6> mac2 = bdaddr.ToArray();
  ASSERT_EQ(mac, mac2);
}