1 // Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_SOCKET_TCP_SOCKET_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_SOCKET_TCP_SOCKET_H_ 7 8 #include <string> 9 10 #include "chrome/browser/extensions/api/socket/socket.h" 11 12 // This looks like it should be forward-declarable, but it does some tricky 13 // moves that make it easier to just include it. 14 #include "net/socket/tcp_client_socket.h" 15 #include "net/socket/tcp_server_socket.h" 16 17 namespace net { 18 class Socket; 19 } 20 21 namespace extensions { 22 23 class TCPSocket : public Socket { 24 public: 25 explicit TCPSocket(const std::string& owner_extension_id); 26 TCPSocket(net::TCPClientSocket* tcp_client_socket, 27 const std::string& owner_extension_id, 28 bool is_connected = false); 29 30 virtual ~TCPSocket(); 31 32 virtual void Connect(const std::string& address, 33 int port, 34 const CompletionCallback& callback) OVERRIDE; 35 virtual void Disconnect() OVERRIDE; 36 virtual int Bind(const std::string& address, int port) OVERRIDE; 37 virtual void Read(int count, 38 const ReadCompletionCallback& callback) OVERRIDE; 39 virtual void RecvFrom(int count, 40 const RecvFromCompletionCallback& callback) OVERRIDE; 41 virtual void SendTo(scoped_refptr<net::IOBuffer> io_buffer, 42 int byte_count, 43 const std::string& address, 44 int port, 45 const CompletionCallback& callback) OVERRIDE; 46 virtual bool SetKeepAlive(bool enable, int delay) OVERRIDE; 47 virtual bool SetNoDelay(bool no_delay) OVERRIDE; 48 virtual int Listen(const std::string& address, int port, 49 int backlog, std::string* error_msg) OVERRIDE; 50 virtual void Accept(const AcceptCompletionCallback &callback) OVERRIDE; 51 52 virtual bool IsConnected() OVERRIDE; 53 54 virtual bool GetPeerAddress(net::IPEndPoint* address) OVERRIDE; 55 virtual bool GetLocalAddress(net::IPEndPoint* address) OVERRIDE; 56 virtual Socket::SocketType GetSocketType() const OVERRIDE; 57 58 static TCPSocket* CreateSocketForTesting( 59 net::TCPClientSocket* tcp_client_socket, 60 const std::string& owner_extension_id, 61 bool is_connected = false); 62 static TCPSocket* CreateServerSocketForTesting( 63 net::TCPServerSocket* tcp_server_socket, 64 const std::string& owner_extension_id); 65 66 protected: 67 virtual int WriteImpl(net::IOBuffer* io_buffer, 68 int io_buffer_size, 69 const net::CompletionCallback& callback) OVERRIDE; 70 71 private: 72 void RefreshConnectionStatus(); 73 void OnConnectComplete(int result); 74 void OnReadComplete(scoped_refptr<net::IOBuffer> io_buffer, 75 int result); 76 void OnAccept(int result); 77 78 TCPSocket(net::TCPServerSocket* tcp_server_socket, 79 const std::string& owner_extension_id); 80 81 scoped_ptr<net::TCPClientSocket> socket_; 82 scoped_ptr<net::TCPServerSocket> server_socket_; 83 84 enum SocketMode { 85 UNKNOWN = 0, 86 CLIENT, 87 SERVER, 88 }; 89 SocketMode socket_mode_; 90 91 CompletionCallback connect_callback_; 92 93 ReadCompletionCallback read_callback_; 94 95 scoped_ptr<net::StreamSocket> accept_socket_; 96 AcceptCompletionCallback accept_callback_; 97 }; 98 99 } // namespace extensions 100 101 #endif // CHROME_BROWSER_EXTENSIONS_API_SOCKET_TCP_SOCKET_H_ 102