| Index: mojo/system/message_in_transit.h
|
| diff --git a/mojo/system/message_in_transit.h b/mojo/system/message_in_transit.h
|
| index 77b658fa4f5cccf8722798cdeeab29de06289f6f..b072e233f107b11fe004a56d0596676945b965fc 100644
|
| --- a/mojo/system/message_in_transit.h
|
| +++ b/mojo/system/message_in_transit.h
|
| @@ -18,8 +18,32 @@ namespace system {
|
| // Note: This class is POD.
|
| class MOJO_SYSTEM_EXPORT MessageInTransit {
|
| public:
|
| - // Creates a |MessageInTransit| with the data given by |bytes|/|num_bytes|.
|
| - static MessageInTransit* Create(const void* bytes, uint32_t num_bytes);
|
| + typedef uint16_t Type;
|
| + // Messages that are forwarded to |MessagePipeEndpoint|s.
|
| + static const Type kTypeMessagePipeEndpoint = 0;
|
| + // Messages that are forwarded to |MessagePipe|s.
|
| + static const Type kTypeMessagePipe = 1;
|
| + // Messages that are consumed by the channel.
|
| + static const Type TYPE_CHANNEL = 2;
|
| +
|
| + typedef uint16_t Subtype;
|
| + // Subtypes for type |kTypeMessagePipeEndpoint|:
|
| + static const Subtype kSubtypeMessagePipeEndpointData = 0;
|
| + // Subtypes for type |kTypeMessagePipe|:
|
| + static const Subtype kSubtypeMessagePipePeerClosed = 0;
|
| +
|
| + typedef uint32_t EndpointId;
|
| + // Never a valid endpoint ID.
|
| + static const EndpointId kInvalidEndpointId = 0;
|
| +
|
| + // Messages (the header and data) must always be aligned to a multiple of this
|
| + // quantity (which must be a power of 2).
|
| + static const size_t kMessageAlignment = 8;
|
| +
|
| + // Creates a |MessageInTransit| of the given |type| and |subtype|, with the
|
| + // data given by |bytes|/|num_bytes|.
|
| + static MessageInTransit* Create(Type type, Subtype subtype,
|
| + const void* bytes, uint32_t num_bytes);
|
|
|
| // Destroys a |MessageInTransit| created using |Create()|.
|
| inline void Destroy() {
|
| @@ -41,11 +65,17 @@ class MOJO_SYSTEM_EXPORT MessageInTransit {
|
| return RoundUpMessageAlignment(sizeof(*this) + size_);
|
| }
|
|
|
| - // TODO(vtl): Add whatever's necessary to transport handles.
|
| + Type type() const { return type_; }
|
| + Subtype subtype() const { return subtype_; }
|
| + EndpointId source_id() const { return source_id_; }
|
| + EndpointId destination_id() const { return destination_id_; }
|
|
|
| - // Messages (the header and data) must always be aligned to a multiple of this
|
| - // quantity (which must be a power of 2).
|
| - static const size_t kMessageAlignment = 8;
|
| + void set_source_id(EndpointId source_id) { source_id_ = source_id; }
|
| + void set_destination_id(EndpointId destination_id) {
|
| + destination_id_ = destination_id;
|
| + }
|
| +
|
| + // TODO(vtl): Add whatever's necessary to transport handles.
|
|
|
| // Rounds |n| up to a multiple of |kMessageAlignment|.
|
| static inline size_t RoundUpMessageAlignment(size_t n) {
|
| @@ -53,14 +83,19 @@ class MOJO_SYSTEM_EXPORT MessageInTransit {
|
| }
|
|
|
| private:
|
| - explicit MessageInTransit(uint32_t size)
|
| - : size_(size), reserved_(0), user_1_(0), user_2_(0) {}
|
| + explicit MessageInTransit(uint32_t size, Type type, Subtype subtype)
|
| + : size_(size),
|
| + type_(type),
|
| + subtype_(subtype),
|
| + source_id_(kInvalidEndpointId),
|
| + destination_id_(kInvalidEndpointId) {}
|
|
|
| // "Header" for the data.
|
| uint32_t size_;
|
| - uint32_t reserved_;
|
| - uint32_t user_1_;
|
| - uint32_t user_2_;
|
| + Type type_;
|
| + Subtype subtype_;
|
| + EndpointId source_id_;
|
| + EndpointId destination_id_;
|
|
|
| // Intentionally unimplemented (and private): Use |Destroy()| instead (which
|
| // simply frees the memory).
|
|
|