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 20 namespace base { 21 class File; 22 class SingleThreadTaskRunner; 23 } // namespace base 24 25 namespace IPC { 26 class ChannelProxy; 27 class Listener; 28 } // namespace IPC 29 30 namespace 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). 37 bool 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. 47 bool 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