Loading system/types/raw_address.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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!"); Loading @@ -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; Loading system/types/raw_address.h +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading system/types/test/raw_address_unittest.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading
system/types/raw_address.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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!"); Loading @@ -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; Loading
system/types/raw_address.h +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading
system/types/test/raw_address_unittest.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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); }