1 // Copyright 2013 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 LIBRARIES_NACL_IO_SOCKET_TCP_NODE_H_ 6 #define LIBRARIES_NACL_IO_SOCKET_TCP_NODE_H_ 7 8 #include "nacl_io/ossocket.h" 9 #ifdef PROVIDES_SOCKET_API 10 11 #include <ppapi/c/pp_resource.h> 12 #include <ppapi/c/ppb_tcp_socket.h> 13 14 #include "nacl_io/node.h" 15 #include "nacl_io/socket/socket_node.h" 16 #include "nacl_io/socket/tcp_event_emitter.h" 17 18 namespace nacl_io { 19 20 class TcpNode : public SocketNode { 21 public: 22 explicit TcpNode(Filesystem* filesystem); 23 TcpNode(Filesystem* filesystem, PP_Resource socket); 24 25 protected: 26 virtual Error Init(int open_flags); 27 virtual void Destroy(); 28 29 public: 30 virtual EventEmitter* GetEventEmitter(); 31 32 virtual void QueueAccept(); 33 virtual void QueueConnect(); 34 virtual void QueueInput(); 35 virtual void QueueOutput(); 36 37 virtual Error Accept(const HandleAttr& attr, 38 PP_Resource* out_sock, 39 struct sockaddr* addr, 40 socklen_t* len); 41 virtual Error Bind(const struct sockaddr* addr, socklen_t len); 42 virtual Error Connect(const HandleAttr& attr, 43 const struct sockaddr* addr, 44 socklen_t len); 45 virtual Error GetSockOpt(int lvl, int optname, void* optval, socklen_t* len); 46 virtual Error Listen(int backlog); 47 virtual Error SetSockOpt(int lvl, 48 int optname, 49 const void* optval, 50 socklen_t len); 51 virtual Error Shutdown(int how); 52 53 virtual void SetError_Locked(int pp_error_num); 54 void ConnectDone_Locked(); 55 void ConnectFailed_Locked(); 56 57 protected: 58 Error SetNoDelay_Locked(); 59 virtual Error Recv_Locked(void* buf, 60 size_t len, 61 PP_Resource* out_addr, 62 int* out_len); 63 64 virtual Error Send_Locked(const void* buf, 65 size_t len, 66 PP_Resource addr, 67 int* out_len); 68 69 ScopedTcpEventEmitter emitter_; 70 PP_Resource accepted_socket_; 71 bool tcp_nodelay_; 72 }; 73 74 } // namespace nacl_io 75 76 #endif // PROVIDES_SOCKET_API 77 #endif // LIBRARIES_NACL_IO_SOCKET_TCP_NODE_H_ 78