1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
6#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
7
8#include "base/basictypes.h"
9
10// Message file contains IPC messages and message names. Each message type
11// has a NameTableEntry mapping the type to a name.
12//
13// |========================|
14// | FileHeader             |
15// |========================|
16// | Message                |
17// |------------------------|
18// | Message                |
19// |------------------------|
20// | ...                    |
21// |========================|
22// | NameTableEntry         |
23// |------------------------|
24// | NameTableEntry         |
25// |------------------------|
26// | ...                    |
27// |------------------------|
28// | type = 0x0002070f      |
29// | string_table_offset = ----+
30// |------------------------|  |
31// | ...                    |  |
32// |========================|  |
33// | message name           |  |
34// |------------------------|  |
35// | message name           |  |
36// |------------------------|  |
37// | ...                    |  |
38// |------------------------|  |
39// | "FrameHostMsg_OpenURL" <--+
40// |------------------------|
41// | ...                    |
42// |========================|
43
44namespace ipc_fuzzer {
45
46struct FileHeader {
47  static const uint32 kMagicValue = 0x1bcf11ee;
48  static const uint32 kCurrentVersion = 1;
49
50  uint32 magic;
51  uint32 version;
52  uint32 message_count;
53  uint32 name_count;
54};
55
56struct NameTableEntry {
57  uint32 type;
58  uint32 string_table_offset;
59};
60
61}  // namespace ipc_fuzzer
62
63#endif  // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
64