diff options
author | Mattias Nissler <mnissler@google.com> | 2016-03-21 17:30:53 +0100 |
---|---|---|
committer | Mattias Nissler <mnissler@google.com> | 2016-03-23 17:52:18 +0100 |
commit | 417e23fa8c8c8f9dd77a19e60c47b46d5454000d (patch) | |
tree | ab230c8c746ea9d652c3549a2c5def49a78bde63 /messages | |
parent | fce04ee60f5e12cf5b43d4c8c6be58f5884db71f (diff) | |
download | nvram-417e23fa8c8c8f9dd77a19e60c47b46d5454000d.tar.gz |
Add fake-nvram daemon to persist NVRAM data
Create a daemon to host the access-controlled NVRAM backend used for
testing in the emulators. This makes access-controlled NVRAM data
persistent, which more closely resembles the behavior of a real
implementation.
BUG:27764637
Change-Id: Iaf1a44881527896628452810561e315c572be31c
Diffstat (limited to 'messages')
-rw-r--r-- | messages/include/nvram/messages/io.h | 17 | ||||
-rw-r--r-- | messages/include/nvram/messages/nvram_messages.h | 5 | ||||
-rw-r--r-- | messages/nvram_messages.cpp | 12 |
3 files changed, 34 insertions, 0 deletions
diff --git a/messages/include/nvram/messages/io.h b/messages/include/nvram/messages/io.h index 522469f..08c1091 100644 --- a/messages/include/nvram/messages/io.h +++ b/messages/include/nvram/messages/io.h @@ -144,6 +144,23 @@ class NVRAM_EXPORT OutputStreamBuffer { uint8_t* end_ = nullptr; }; +// An |OutputStreamBuffer| backed by a single data buffer. +class NVRAM_EXPORT ArrayOutputStreamBuffer : public OutputStreamBuffer { + public: + ArrayOutputStreamBuffer() = default; + ArrayOutputStreamBuffer(void* data, size_t size) + : OutputStreamBuffer(data, size), data_(pos_) {} + ArrayOutputStreamBuffer(void* data, void* end) + : OutputStreamBuffer(data, end), data_(pos_) {} + ~ArrayOutputStreamBuffer() override = default; + + // Returns the number of bytes already written. + size_t bytes_written() const { return pos_ - data_; } + + private: + uint8_t* data_ = nullptr; +}; + // An |OutputStream| implementation that doesn't write anything, but just counts // the number of bytes written. class NVRAM_EXPORT CountingOutputStreamBuffer : public OutputStreamBuffer { diff --git a/messages/include/nvram/messages/nvram_messages.h b/messages/include/nvram/messages/nvram_messages.h index b352d9f..e574707 100644 --- a/messages/include/nvram/messages/nvram_messages.h +++ b/messages/include/nvram/messages/nvram_messages.h @@ -162,6 +162,11 @@ struct Response { template <typename Message> bool Encode(const Message& msg, Blob* blob); +// Encode |msg| to |buffer|, which is of size |*size|. Updates |*size| to +// indicate the number of bytes written. Returns true on success. +template <typename Message> +bool Encode(const Message& msg, void* buffer, size_t* size); + // Decode |msg| from the |data| buffer, which contains |size| bytes. Returns // true if successful. template <typename Message> diff --git a/messages/nvram_messages.cpp b/messages/nvram_messages.cpp index a984876..7b1cafb 100644 --- a/messages/nvram_messages.cpp +++ b/messages/nvram_messages.cpp @@ -159,6 +159,16 @@ bool Encode(const Message& msg, Blob* blob) { } template <typename Message> +bool Encode(const Message& msg, void* buffer, size_t* size) { + ArrayOutputStreamBuffer stream(buffer, *size); + if (!nvram::proto::Encode(msg, &stream)) { + return false; + } + *size = stream.bytes_written(); + return true; +} + +template <typename Message> bool Decode(const uint8_t* data, size_t size, Message* msg) { InputStreamBuffer stream(data, size); return nvram::proto::Decode(msg, &stream) && stream.Done(); @@ -166,9 +176,11 @@ bool Decode(const uint8_t* data, size_t size, Message* msg) { // Instantiate the templates for the |Request| and |Response| message types. template NVRAM_EXPORT bool Encode<Request>(const Request&, Blob*); +template NVRAM_EXPORT bool Encode<Request>(const Request&, void*, size_t*); template NVRAM_EXPORT bool Decode<Request>(const uint8_t*, size_t, Request*); template NVRAM_EXPORT bool Encode<Response>(const Response&, Blob*); +template NVRAM_EXPORT bool Encode<Response>(const Response&, void*, size_t*); template NVRAM_EXPORT bool Decode<Response>(const uint8_t*, size_t, Response*); } // namespace nvram |