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