#include "service/util/address_helper.h"
+namespace util {
+
TEST(UtilTest, IsAddressValid) {
- EXPECT_FALSE(util::IsAddressValid(""));
- EXPECT_FALSE(util::IsAddressValid("000000000000"));
- EXPECT_FALSE(util::IsAddressValid("00:00:00:00:0000"));
- EXPECT_FALSE(util::IsAddressValid("00:00:00:00:00:0"));
- EXPECT_FALSE(util::IsAddressValid("00:00:00:00:00:0;"));
- EXPECT_TRUE(util::IsAddressValid("00:00:00:00:00:00"));
- EXPECT_TRUE(util::IsAddressValid("aB:cD:eF:Gh:iJ:Kl"));
+ EXPECT_FALSE(IsAddressValid(""));
+ EXPECT_FALSE(IsAddressValid("000000000000"));
+ EXPECT_FALSE(IsAddressValid("00:00:00:00:0000"));
+ EXPECT_FALSE(IsAddressValid("00:00:00:00:00:0"));
+ EXPECT_FALSE(IsAddressValid("00:00:00:00:00:0;"));
+ EXPECT_TRUE(IsAddressValid("00:00:00:00:00:00"));
+ EXPECT_FALSE(IsAddressValid("aB:cD:eF:Gh:iJ:Kl"));
+}
+
+TEST(UtilTest, BdAddrFromString) {
+ bt_bdaddr_t addr;
+ memset(&addr, 0, sizeof(addr));
+
+ EXPECT_TRUE(BdAddrFromString("00:00:00:00:00:00", &addr));
+ const bt_bdaddr_t result0 = {{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }};
+ EXPECT_EQ(0, memcmp(&addr, &result0, sizeof(addr)));
+
+ EXPECT_TRUE(BdAddrFromString("ab:01:4C:d5:21:9f", &addr));
+ const bt_bdaddr_t result1 = {{ 0xab, 0x01, 0x4c, 0xd5, 0x21, 0x9f }};
+ EXPECT_EQ(0, memcmp(&addr, &result1, sizeof(addr)));
}
+
+} // namespace util
#include "service/util/address_helper.h"
+#include <cstdlib>
+
+#include <base/logging.h>
#include <base/strings/string_split.h>
namespace util {
bool IsAddressValid(const std::string& address) {
+ bt_bdaddr_t addr;
+ return BdAddrFromString(address, &addr);
+}
+
+bool BdAddrFromString(const std::string& address, bt_bdaddr_t* out_addr) {
+ CHECK(out_addr);
+
if (address.length() != 17)
return false;
if (byte_tokens.size() != 6)
return false;
- for (const auto& token : byte_tokens) {
- if (token.length() != 2)
- return false;
+ for (int i = 0; i < 6; i++) {
+ const auto& token = byte_tokens[i];
- if (!std::isalpha(token[0]) && !std::isdigit(token[0]))
+ if (token.length() != 2)
return false;
- if (!std::isalpha(token[1]) && !std::isdigit(token[1]))
+ char* temp = nullptr;
+ out_addr->address[i] = strtol(token.c_str(), &temp, 16);
+ if (*temp != '\0')
return false;
}