diff options
author | 2015-09-03 15:00:52 -0700 | |
---|---|---|
committer | 2015-09-14 21:07:23 +0000 | |
commit | 04b0094def399d9e395e5d860c9b3e98c275f84b (patch) | |
tree | b9747a1dd355c68265bd043cf4573af72d7960dd | |
parent | 849a775817e4b980d02fc7848d662ca885e1a0c8 (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.cpp | 2 | ||||
-rw-r--r-- | system/service/uuid.cpp | 17 | ||||
-rw-r--r-- | system/service/uuid.h | 23 |
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; |