1// Copyright (c) 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_MOUNT_NODE_TCP_H_ 6#define LIBRARIES_NACL_IO_MOUNT_NODE_TCP_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/event_emitter_tcp.h" 15#include "nacl_io/mount_node.h" 16#include "nacl_io/mount_node_socket.h" 17 18namespace nacl_io { 19 20class MountNodeTCP : public MountNodeSocket { 21 public: 22 explicit MountNodeTCP(Mount* mount); 23 MountNodeTCP(Mount* mount, 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, 46 int optname, 47 void* optval, 48 socklen_t* len); 49 virtual Error Listen(int backlog); 50 virtual Error SetSockOpt(int lvl, 51 int optname, 52 const void* optval, 53 socklen_t len); 54 virtual Error Shutdown(int how); 55 56 virtual void SetError_Locked(int pp_error_num); 57 void ConnectDone_Locked(); 58 void ConnectFailed_Locked(); 59 60 protected: 61 Error SetNoDelay_Locked(); 62 virtual Error Recv_Locked(void* buf, 63 size_t len, 64 PP_Resource* out_addr, 65 int* out_len); 66 67 virtual Error Send_Locked(const void* buf, 68 size_t len, 69 PP_Resource addr, 70 int* out_len); 71 72 ScopedEventEmitterTCP emitter_; 73 PP_Resource accepted_socket_; 74 bool tcp_nodelay_; 75}; 76 77 78} // namespace nacl_io 79 80#endif // PROVIDES_SOCKET_API 81#endif // LIBRARIES_NACL_IO_MOUNT_NODE_TCP_H_ 82