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-11 04:17:17 +0000
committerjeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-11 04:17:17 +0000
commit3cfcda39679d94a12a7494dd4a73dc32c37dfce8 (patch)
tree5bd4ea646b094f481d183552bc3b924dd5b3a8ba /ipc/ipc_channel_factory.h
parent8e97f014e47198ff1475bc5e9c57e4280a8bc18c (diff)
downloadchromium_src-3cfcda39679d94a12a7494dd4a73dc32c37dfce8.zip
chromium_src-3cfcda39679d94a12a7494dd4a73dc32c37dfce8.tar.gz
chromium_src-3cfcda39679d94a12a7494dd4a73dc32c37dfce8.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. Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=186912 Review URL: https://chromiumcodereview.appspot.com/12386010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187233 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_