summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Arman Uguray <armansito@google.com> 2015-09-03 15:00:52 -0700
committer Arman Uguray <armansito@google.com> 2015-09-14 21:07:23 +0000
commit04b0094def399d9e395e5d860c9b3e98c275f84b (patch)
treeb9747a1dd355c68265bd043cf4573af72d7960dd
parent849a775817e4b980d02fc7848d662ca885e1a0c8 (diff)
service: Add UUID::GetRandom
Added a static class method to UUID that returns a random 128-bit UUID. Also converted the enum constants to pure integer constants to make their meaning more explicit. Bug: 23395353 Change-Id: If8b97d40c020fdfc8b460b537b2da7c62b0c24ad
-rw-r--r--system/service/test/uuid_unittest.cpp2
-rw-r--r--system/service/uuid.cpp17
-rw-r--r--system/service/uuid.h23
3 files changed, 26 insertions, 16 deletions
diff --git a/system/service/test/uuid_unittest.cpp b/system/service/test/uuid_unittest.cpp
index 6f828c9552..afa23570eb 100644
--- a/system/service/test/uuid_unittest.cpp
+++ b/system/service/test/uuid_unittest.cpp
@@ -25,7 +25,7 @@ using namespace bluetooth;
namespace {
-const std::array<uint8_t, UUID::kUUID128Octets> kBtSigBaseUUID = {
+const std::array<uint8_t, UUID::kNumBytes128> kBtSigBaseUUID = {
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, }
};
diff --git a/system/service/uuid.cpp b/system/service/uuid.cpp
index 74009c49a7..412bb6a053 100644
--- a/system/service/uuid.cpp
+++ b/system/service/uuid.cpp
@@ -21,8 +21,17 @@
#include <stack>
#include <string>
+#include <base/rand_util.h>
+
namespace bluetooth {
+// static
+UUID UUID::GetRandom() {
+ UUID128Bit bytes;
+ base::RandBytes(bytes.data(), bytes.size());
+ return UUID(bytes);
+}
+
void UUID::InitializeDefault() {
// Initialize to base bluetooth UUID.
id_ = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
@@ -47,17 +56,17 @@ UUID::UUID(const bt_uuid_t& uuid) {
std::reverse_copy(uuid.uu, uuid.uu + sizeof(uuid.uu), id_.begin());
}
-UUID::UUID(const UUID::UUID16Bit& uuid) {
+UUID::UUID(const UUID16Bit& uuid) {
InitializeDefault();
- std::copy(uuid.begin(), uuid.end(), id_.begin() + kUUID16Octets);
+ std::copy(uuid.begin(), uuid.end(), id_.begin() + kNumBytes16);
}
-UUID::UUID(const UUID::UUID32Bit& uuid) {
+UUID::UUID(const UUID32Bit& uuid) {
InitializeDefault();
std::copy(uuid.begin(), uuid.end(), id_.begin());
}
-UUID::UUID(const UUID::UUID128Bit& uuid) : id_(uuid) {}
+UUID::UUID(const UUID128Bit& uuid) : id_(uuid) {}
const UUID::UUID128Bit UUID::GetFullBigEndian() const {
return id_;
diff --git a/system/service/uuid.h b/system/service/uuid.h
index 929294f848..fa0bd6fed3 100644
--- a/system/service/uuid.h
+++ b/system/service/uuid.h
@@ -25,15 +25,16 @@ namespace bluetooth {
class UUID {
public:
- enum Type {
- kUUID128Octets = 16,
- kUUID32Octets = 4,
- kUUID16Octets = 2,
- };
+ static constexpr int kNumBytes128 = 16;
+ static constexpr int kNumBytes32 = 4;
+ static constexpr int kNumBytes16 = 2;
- typedef std::array<uint8_t, UUID::kUUID16Octets> UUID16Bit;
- typedef std::array<uint8_t, UUID::kUUID32Octets> UUID32Bit;
- typedef std::array<uint8_t, UUID::kUUID128Octets> UUID128Bit;
+ typedef std::array<uint8_t, kNumBytes16> UUID16Bit;
+ typedef std::array<uint8_t, kNumBytes32> UUID32Bit;
+ typedef std::array<uint8_t, kNumBytes128> UUID128Bit;
+
+ // Creates and returns a random 128-bit UUID.
+ static UUID GetRandom();
// Construct a Bluetooth 'base' UUID.
UUID();
@@ -45,9 +46,9 @@ class UUID {
explicit UUID(const std::string& uuid);
// std::array variants constructors.
- explicit UUID(const UUID::UUID16Bit& uuid);
- explicit UUID(const UUID::UUID32Bit& uuid);
- explicit UUID(const UUID::UUID128Bit& uuid);
+ explicit UUID(const UUID16Bit& uuid);
+ explicit UUID(const UUID32Bit& uuid);
+ explicit UUID(const UUID128Bit& uuid);
// Provide the full network-byte-ordered blob.
const UUID128Bit GetFullBigEndian() const;