- add sources.
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / libraries / nacl_io / mount_node_tcp.h
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
18 namespace nacl_io {
19
20 class 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 Listen(int backlog);
43   virtual Error Connect(const HandleAttr& attr,
44                         const struct sockaddr* addr,
45                         socklen_t len);
46   virtual Error Shutdown(int how);
47
48   virtual void SetError_Locked(int pp_error_num);
49   void ConnectDone_Locked();
50   void ConnectFailed_Locked();
51
52  protected:
53   virtual Error Recv_Locked(void* buf,
54                             size_t len,
55                             PP_Resource* out_addr,
56                             int* out_len);
57
58   virtual Error Send_Locked(const void* buf,
59                             size_t len,
60                             PP_Resource addr,
61                             int* out_len);
62
63   ScopedEventEmitterTCP emitter_;
64   PP_Resource accepted_socket_;
65 };
66
67
68 }  // namespace nacl_io
69
70 #endif  // PROVIDES_SOCKET_API
71 #endif  // LIBRARIES_NACL_IO_MOUNT_NODE_TCP_H_