1 // Copyright (c) 2015 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.
5 #include "base/files/file_path.h"
6 #include "base/process/process.h"
7 #include "base/strings/string_number_conversions.h"
8 #include "ipc/ipc_channel_proxy.h"
9 #include "tools/ipc_fuzzer/message_lib/message_file.h"
12 #define PidToStringType base::UintToString16
13 #define MESSAGE_DUMP_EXPORT __declspec(dllexport)
15 #define PidToStringType base::IntToString
16 #define MESSAGE_DUMP_EXPORT __attribute__((visibility("default")))
19 namespace ipc_fuzzer
{
21 class IPCDump
: public IPC::ChannelProxy::OutgoingMessageFilter
{
24 base::FilePath::StringType pid_string
=
25 PidToStringType(base::Process::Current().Pid());
26 base::FilePath output_file_path
=
27 dump_directory().Append(pid_string
+ FILE_PATH_LITERAL(".ipcdump"));
29 MessageFile::Write(output_file_path
, messages_
);
32 IPC::Message
* Rewrite(IPC::Message
* message
) override
{
33 messages_
.push_back(new IPC::Message(*message
));
37 base::FilePath
dump_directory() const { return dump_directory_
; }
39 void set_dump_directory(const base::FilePath
& dump_directory
) {
40 dump_directory_
= dump_directory
;
44 MessageVector messages_
;
45 base::FilePath dump_directory_
;
50 } // namespace ipc_fuzzer
52 // Entry point avoiding mangled names.
54 MESSAGE_DUMP_EXPORT
IPC::ChannelProxy::OutgoingMessageFilter
* GetFilter(void);
55 MESSAGE_DUMP_EXPORT
void SetDumpDirectory(const base::FilePath
& dump_directory
);
58 IPC::ChannelProxy::OutgoingMessageFilter
* GetFilter(void) {
59 return &ipc_fuzzer::g_ipcdump
;
62 void SetDumpDirectory(const base::FilePath
& dump_directory
) {
63 ipc_fuzzer::g_ipcdump
.set_dump_directory(dump_directory
);