Index: net/socket/unix_domain_client_socket_posix.h |
diff --git a/net/socket/unix_domain_client_socket_posix.h b/net/socket/unix_domain_client_socket_posix.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7f54b56bd858b73c523760476f5c56de039ad1b7 |
--- /dev/null |
+++ b/net/socket/unix_domain_client_socket_posix.h |
@@ -0,0 +1,101 @@ |
+// Copyright 2014 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 NET_SOCKET_UNIX_DOMAIN_CLIENT_SOCKET_POSIX_H_ |
+#define NET_SOCKET_UNIX_DOMAIN_CLIENT_SOCKET_POSIX_H_ |
+ |
+#include <string> |
+ |
+#include <sys/socket.h> |
+#include <sys/un.h> |
+ |
+#include "base/basictypes.h" |
+#include "base/callback.h" |
+#include "base/message_loop/message_loop.h" |
+#include "net/base/net_export.h" |
+#include "net/socket/socket_descriptor.h" |
+#include "net/socket/stream_socket.h" |
+ |
+namespace net { |
+ |
+class NET_EXPORT UnixDomainClientSocket |
+ : public StreamSocket, |
+ public base::MessageLoopForIO::Watcher { |
+ public: |
+ // Builds a client socket with socket_path. The caller should call Connect() |
+ // to connect to server sockect. |
+ UnixDomainClientSocket(const std::string& socket_path, |
+ bool use_abstract_namespace); |
+ // Builds a client socket with socket fd which is already connected. |
+ // UnixDomainServerSocket uses this after it accepts a connection. |
+ explicit UnixDomainClientSocket(SocketDescriptor socket_fd); |
+ |
+ virtual ~UnixDomainClientSocket(); |
+ |
+ // Fills |sock_addr| with |socket_path|. For Android or Linux platform, it |
+ // supports abstract namespace. |socket_addr_len| is in/out parameter as |
+ // POSIX socket interfaces. |
+ static bool FillAddress(const std::string& socket_path, |
+ bool use_abstract_namespace, |
+ sockaddr_un* socket_addr, |
+ socklen_t* socket_addr_len); |
+ |
+ // StreamSocket implementation. |
+ virtual int Connect(const CompletionCallback& callback) OVERRIDE; |
+ virtual void Disconnect() OVERRIDE; |
+ virtual bool IsConnected() const OVERRIDE; |
+ virtual bool IsConnectedAndIdle() const OVERRIDE; |
+ virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE; |
+ virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE; |
+ virtual const BoundNetLog& NetLog() const OVERRIDE; |
+ virtual void SetSubresourceSpeculation() OVERRIDE; |
+ virtual void SetOmniboxSpeculation() OVERRIDE; |
+ virtual bool WasEverUsed() const OVERRIDE; |
+ virtual bool UsingTCPFastOpen() const OVERRIDE; |
+ virtual bool WasNpnNegotiated() const OVERRIDE; |
+ virtual NextProto GetNegotiatedProtocol() const OVERRIDE; |
+ virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE; |
+ |
+ // Socket implementation. |
+ virtual int Read(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int Write(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int SetReceiveBufferSize(int32 size) OVERRIDE; |
+ virtual int SetSendBufferSize(int32 size) OVERRIDE; |
+ |
+ // base::MessageLoopForIO::Watcher methods. |
+ virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; |
+ virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; |
mmenke
2014/06/11 16:05:50
These aren't intended to be used by consumers, so
byungchul
2014/06/20 08:22:32
Done.
|
+ |
+ private: |
+ int DoConnect(); |
+ void DidCompleteConnect(); |
+ int DoRead(IOBuffer* buf, int buf_len); |
+ void DidCompleteRead(); |
+ int DoWrite(IOBuffer* buf, int buf_len); |
+ void DidCompleteWrite(); |
+ |
+ const std::string socket_path_; |
+ const bool use_abstract_namespace_; |
+ SocketDescriptor socket_fd_; |
+ BoundNetLog netlog_; |
+ bool waiting_connect_; |
+ |
+ base::MessageLoopForIO::FileDescriptorWatcher read_socket_watcher_; |
+ IOBuffer* read_buf_; |
+ int read_buf_len_; |
+ CompletionCallback read_callback_; |
+ |
+ base::MessageLoopForIO::FileDescriptorWatcher write_socket_watcher_; |
+ IOBuffer* write_buf_; |
+ int write_buf_len_; |
+ CompletionCallback write_callback_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UnixDomainClientSocket); |
+}; |
+ |
+} // namespace net |
+ |
+#endif // NET_SOCKET_UNIX_DOMAIN_CLIENT_SOCKET_POSIX_H_ |