// 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 #include "base/basictypes.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "net/base/completion_callback.h" #include "net/base/net_export.h" #include "net/base/net_log.h" #include "net/socket/stream_socket.h" namespace net { class SocketLibevent; struct SockaddrStorage; // A client socket that uses unix domain socket as the transport layer. class NET_EXPORT UnixDomainClientSocket : public StreamSocket { public: // Builds a client socket with |socket_path|. The caller should call Connect() // to connect to a server socket. UnixDomainClientSocket(const std::string& socket_path, bool use_abstract_namespace); // Builds a client socket with socket libevent which is already connected. // UnixDomainServerSocket uses this after it accepts a connection. explicit UnixDomainClientSocket(scoped_ptr socket); virtual ~UnixDomainClientSocket(); // Fills |address| with |socket_path| and its length. For Android or Linux // platform, this supports abstract namespaces. static bool FillAddress(const std::string& socket_path, bool use_abstract_namespace, SockaddrStorage* address); // 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; private: const std::string socket_path_; const bool use_abstract_namespace_; scoped_ptr socket_; // This net log is just to comply StreamSocket::NetLog(). It throws away // everything. BoundNetLog net_log_; DISALLOW_COPY_AND_ASSIGN(UnixDomainClientSocket); }; } // namespace net #endif // NET_SOCKET_UNIX_DOMAIN_CLIENT_SOCKET_POSIX_H_