Chromium Code Reviews| Index: mojo/public/cpp/bindings/lib/message_builder.cc |
| diff --git a/mojo/public/cpp/bindings/lib/message_builder.cc b/mojo/public/cpp/bindings/lib/message_builder.cc |
| index 4ffa1808cc99f614753713eacf6e10b8b539abf4..44d5a22ae222a39d6635e7c4420c40fb9b9afaef 100644 |
| --- a/mojo/public/cpp/bindings/lib/message_builder.cc |
| +++ b/mojo/public/cpp/bindings/lib/message_builder.cc |
| @@ -4,11 +4,10 @@ |
| #include "mojo/public/cpp/bindings/lib/message_builder.h" |
| -#include <stddef.h> |
| -#include <stdint.h> |
| - |
| -#include "mojo/public/cpp/bindings/lib/serialization_util.h" |
| -#include "mojo/public/cpp/bindings/message.h" |
| +#include "mojo/public/cpp/bindings/lib/array_internal.h" |
| +#include "mojo/public/cpp/bindings/lib/bindings_internal.h" |
| +#include "mojo/public/cpp/bindings/lib/buffer.h" |
| +#include "mojo/public/cpp/bindings/lib/message_internal.h" |
| namespace mojo { |
| namespace internal { |
| @@ -19,38 +18,52 @@ void Allocate(Buffer* buf, Header** header) { |
| (*header)->num_bytes = sizeof(Header); |
| } |
| -MessageBuilder::MessageBuilder(uint32_t name, size_t payload_size) { |
| - InitializeMessage(sizeof(MessageHeader) + payload_size); |
| +MessageBuilder::MessageBuilder(uint32_t name, |
| + uint32_t flags, |
| + size_t payload_size, |
| + size_t payload_interface_id_count) { |
| + if (payload_interface_id_count > 0) { |
| + // Version 2 |
| + InitializeMessage( |
| + sizeof(MessageHeaderV2) + Align(payload_size) + |
| + ArrayDataTraits<uint32_t>::GetStorageSize( |
| + static_cast<uint32_t>(payload_interface_id_count))); |
| + |
| + MessageHeaderV2* header; |
| + Allocate(message_.buffer(), &header); |
| + header->version = 2; |
| + header->name = name; |
| + header->flags = flags; |
| + // Set it to right after the message header. |
|
Ken Rockot(use gerrit already)
2017/01/31 18:33:42
nit: Maybe clarify this comment -- something like
yzshen1
2017/01/31 19:26:05
Done.
|
| + header->payload.Set(header + 1); |
| + } else if (flags & |
| + (Message::kFlagExpectsResponse | Message::kFlagIsResponse)) { |
| + // Version 1 |
| + InitializeMessage(sizeof(MessageHeaderV1) + payload_size); |
| + |
| + MessageHeaderV1* header; |
| + Allocate(message_.buffer(), &header); |
| + header->version = 1; |
| + header->name = name; |
| + header->flags = flags; |
| + } else { |
| + InitializeMessage(sizeof(MessageHeader) + payload_size); |
| - MessageHeader* header; |
| - Allocate(message_.buffer(), &header); |
| - header->version = 0; |
| - header->name = name; |
| + MessageHeader* header; |
| + Allocate(message_.buffer(), &header); |
| + header->version = 0; |
| + header->name = name; |
| + header->flags = flags; |
| + } |
| } |
| MessageBuilder::~MessageBuilder() { |
| } |
| -MessageBuilder::MessageBuilder() {} |
| - |
| void MessageBuilder::InitializeMessage(size_t size) { |
| message_.Initialize(static_cast<uint32_t>(Align(size)), |
| true /* zero_initialized */); |
| } |
| -MessageWithRequestIDBuilder::MessageWithRequestIDBuilder(uint32_t name, |
| - size_t payload_size, |
| - uint32_t flags, |
| - uint64_t request_id) { |
| - InitializeMessage(sizeof(MessageHeaderWithRequestID) + payload_size); |
| - |
| - MessageHeaderWithRequestID* header; |
| - Allocate(message_.buffer(), &header); |
| - header->version = 1; |
| - header->name = name; |
| - header->flags = flags; |
| - header->request_id = request_id; |
| -} |
| - |
| } // namespace internal |
| } // namespace mojo |