aboutsummaryrefslogtreecommitdiff
path: root/messages
diff options
context:
space:
mode:
authorMattias Nissler <mnissler@google.com>2016-03-21 17:30:53 +0100
committerMattias Nissler <mnissler@google.com>2016-03-23 17:52:18 +0100
commit417e23fa8c8c8f9dd77a19e60c47b46d5454000d (patch)
treeab230c8c746ea9d652c3549a2c5def49a78bde63 /messages
parentfce04ee60f5e12cf5b43d4c8c6be58f5884db71f (diff)
downloadnvram-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.h17
-rw-r--r--messages/include/nvram/messages/nvram_messages.h5
-rw-r--r--messages/nvram_messages.cpp12
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