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_CRACKER_H_
6#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_CRACKER_H_
7
8#include <string.h>
9#include "ipc/ipc_message.h"
10
11// Means for updating protected message fields.
12class MessageCracker : public IPC::Message {
13 public:
14  static void CopyMessageID(IPC::Message* dst, IPC::Message* src) {
15    memcpy(ToCracker(dst)->mutable_payload(),
16           ToCracker(src)->payload(),
17           sizeof(int));
18  }
19
20  static void SetMessageType(IPC::Message* message, uint32 type) {
21    ToCracker(message)->header()->type = type;
22  }
23
24 private:
25  static MessageCracker* ToCracker(IPC::Message* message) {
26    return reinterpret_cast<MessageCracker*>(message);
27  }
28
29  DISALLOW_COPY_AND_ASSIGN(MessageCracker);
30};
31
32#endif  // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_CRACKER_H_
33