• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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