summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_channel_factory.h
diff options
context:
space:
mode:
authorjeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-13 04:23:10 +0000
committerjeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-13 04:23:10 +0000
commitbdf9bdc258df1e56f7ac7e3de705b0a70e9f93e4 (patch)
tree50c5cfdf9fad5caad2424485f3e30841ee860378 /ipc/ipc_channel_factory.h
parent989ae864ea9b25f772d4a6a648a48b48232bea28 (diff)
downloadchromium_src-bdf9bdc258df1e56f7ac7e3de705b0a70e9f93e4.zip
chromium_src-bdf9bdc258df1e56f7ac7e3de705b0a70e9f93e4.tar.gz
chromium_src-bdf9bdc258df1e56f7ac7e3de705b0a70e9f93e4.tar.bz2
Implement IPC::ChannelFactory, a class that accept()s on a UNIX socket.
IPC::ChannelFactory listens on a UNIX domain socket and notifies its delegate when a client connects. The delegate is expected to craft an IPC::Channel from the handle it is given. Previously committed: - https://src.chromium.org/viewvc/chrome?view=rev&revision=186912 - https://src.chromium.org/viewvc/chrome?view=rev&revision=187233 - https://src.chromium.org/viewvc/chrome?view=rev&revision=187554 Review URL: https://codereview.chromium.org/12386010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187772 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_channel_factory.h')
-rw-r--r--ipc/ipc_channel_factory.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/ipc/ipc_channel_factory.h b/ipc/ipc_channel_factory.h
new file mode 100644
index 0000000..a1e1d85
--- /dev/null
+++ b/ipc/ipc_channel_factory.h
@@ -0,0 +1,57 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IPC_IPC_CHANNEL_FACTORY_H_
+#define IPC_IPC_CHANNEL_FACTORY_H_
+
+#include "base/files/file_path.h"
+#include "base/message_loop.h"
+#include "ipc/ipc_channel_handle.h"
+#include "ipc/ipc_export.h"
+
+namespace IPC {
+
+// A ChannelFactory listens on a UNIX domain socket. When a client connects to
+// the socket, it accept()s the connection and passes the new FD to the
+// delegate. The delegate is then responsible for creating a new IPC::Channel
+// for the FD.
+class IPC_EXPORT ChannelFactory : public MessageLoopForIO::Watcher {
+ public:
+ class Delegate {
+ public:
+ // Called when a client connects to the factory. It is the delegate's
+ // responsibility to create an IPC::Channel for the handle, or else close
+ // the file descriptor contained therein.
+ virtual void OnClientConnected(const ChannelHandle& handle) = 0;
+
+ // Called when an error occurs and the channel is closed.
+ virtual void OnListenError() = 0;
+ };
+
+ ChannelFactory(const base::FilePath& path, Delegate* delegate);
+
+ virtual ~ChannelFactory();
+
+ // Call this to start listening on the socket.
+ bool Listen();
+
+ // Close and unlink the socket, and stop accepting connections.
+ void Close();
+
+ private:
+ bool CreateSocket();
+ virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
+ virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
+
+ MessageLoopForIO::FileDescriptorWatcher server_listen_connection_watcher_;
+ base::FilePath path_;
+ Delegate* delegate_;
+ int listen_fd_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChannelFactory);
+};
+
+} // namespace IPC
+
+#endif // IPC_IPC_CHANNEL_FACTORY_H_