1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace mojo {
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace internal {
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#pragma pack(push, 1)
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)enum {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  kMessageExpectsResponse = 1 << 0,
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  kMessageIsResponse      = 1 << 1
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)struct MessageHeader : internal::StructHeader {
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  uint32_t name;
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  uint32_t flags;
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MOJO_COMPILE_ASSERT(sizeof(MessageHeader) == 16, bad_sizeof_MessageHeader);
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)struct MessageHeaderWithRequestID : MessageHeader {
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  uint64_t request_id;
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MOJO_COMPILE_ASSERT(sizeof(MessageHeaderWithRequestID) == 24,
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    bad_sizeof_MessageHeaderWithRequestID);
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)struct MessageData {
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MessageHeader header;
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MOJO_COMPILE_ASSERT(sizeof(MessageData) == sizeof(MessageHeader),
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    bad_sizeof_MessageData);
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#pragma pack(pop)
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace internal
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace mojo
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
45