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 REMOTING_HOST_IPC_UTIL_H_
6#define REMOTING_HOST_IPC_UTIL_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "base/memory/ref_counted.h"
13#include "base/memory/scoped_ptr.h"
14#include "ipc/ipc_platform_file.h"
15
16#if defined(OS_WIN)
17#include "base/win/scoped_handle.h"
18#endif  // defined(OS_WIN)
19
20namespace base {
21class File;
22class SingleThreadTaskRunner;
23}  // namespace base
24
25namespace IPC {
26class ChannelProxy;
27class Listener;
28}  // namespace IPC
29
30namespace remoting {
31
32// Creates an already connected IPC channel. The server end of the channel
33// is wrapped into a channel proxy that will invoke methods of |listener|
34// on the caller's thread while using |io_task_runner| to send and receive
35// messages in the background. The client end is returned as a pipe handle
36// (inheritable on Windows).
37bool CreateConnectedIpcChannel(
38    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
39    IPC::Listener* listener,
40    base::File* client_out,
41    scoped_ptr<IPC::ChannelProxy>* server_out);
42
43#if defined(OS_WIN)
44
45// Creates the server end of the IPC channel and applies the security
46// descriptor |pipe_security_descriptor| to it.
47bool CreateIpcChannel(
48    const std::string& channel_name,
49    const std::string& pipe_security_descriptor,
50    base::win::ScopedHandle* pipe_out);
51
52#endif  // defined(OS_WIN)
53
54} // namespace remoting
55
56#endif  // REMOTING_HOST_IPC_UTIL_H_
57