OSDN Git Service

service: Add helper to util/address_helper
authorArman Uguray <armansito@google.com>
Wed, 30 Sep 2015 02:39:27 +0000 (19:39 -0700)
committerArman Uguray <armansito@google.com>
Sat, 3 Oct 2015 00:23:12 +0000 (17:23 -0700)
Added the BdAddrFromString function which populates a bt_bdaddr_t
from a string.

Bug: 24245347
Change-Id: I75f798956a796ba6a972fc31e336a1aff86af148

service/test/util_unittest.cpp
service/util/address_helper.cpp
service/util/address_helper.h

index 77247b1..2894d87 100644 (file)
 
 #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
index c3a07aa..2233f90 100644 (file)
 
 #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;
 
@@ -30,14 +40,15 @@ bool IsAddressValid(const std::string& address) {
   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;
   }
 
index a87aa0e..d71d907 100644 (file)
@@ -16,6 +16,7 @@
 
 #pragma once
 
+#include <hardware/bluetooth.h>
 #include <string>
 
 namespace util {
@@ -28,4 +29,8 @@ namespace util {
 // where X is an alpha-numeric character.
 bool IsAddressValid(const std::string& address);
 
+// Populates a bt_bdaddr_t from a given string. Returns false if the data is
+// invalid.
+bool BdAddrFromString(const std::string& address, bt_bdaddr_t* out_addr);
+
 }  // namespace util