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 PPAPI_PROXY_TCP_SOCKET_RESOURCE_H_
6#define PPAPI_PROXY_TCP_SOCKET_RESOURCE_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "ppapi/proxy/tcp_socket_resource_base.h"
11#include "ppapi/thunk/ppb_tcp_socket_api.h"
12
13namespace ppapi {
14
15enum TCPSocketVersion;
16
17namespace proxy {
18
19class PPAPI_PROXY_EXPORT TCPSocketResource : public thunk::PPB_TCPSocket_API,
20                                             public TCPSocketResourceBase {
21 public:
22  // C-tor used for new sockets created.
23  TCPSocketResource(Connection connection,
24                    PP_Instance instance,
25                    TCPSocketVersion version);
26
27  virtual ~TCPSocketResource();
28
29  // PluginResource overrides.
30  virtual thunk::PPB_TCPSocket_API* AsPPB_TCPSocket_API() OVERRIDE;
31
32  // thunk::PPB_TCPSocket_API implementation.
33  virtual int32_t Bind(PP_Resource addr,
34                       scoped_refptr<TrackedCallback> callback) OVERRIDE;
35  virtual int32_t Connect(PP_Resource addr,
36                          scoped_refptr<TrackedCallback> callback) OVERRIDE;
37  virtual PP_Resource GetLocalAddress() OVERRIDE;
38  virtual PP_Resource GetRemoteAddress() OVERRIDE;
39  virtual int32_t Read(char* buffer,
40                       int32_t bytes_to_read,
41                       scoped_refptr<TrackedCallback> callback) OVERRIDE;
42  virtual int32_t Write(const char* buffer,
43                        int32_t bytes_to_write,
44                        scoped_refptr<TrackedCallback> callback) OVERRIDE;
45  virtual int32_t Listen(int32_t backlog,
46                         scoped_refptr<TrackedCallback> callback) OVERRIDE;
47  virtual int32_t Accept(PP_Resource* accepted_tcp_socket,
48                         scoped_refptr<TrackedCallback> callback) OVERRIDE;
49  virtual void Close() OVERRIDE;
50  virtual int32_t SetOption(PP_TCPSocket_Option name,
51                            const PP_Var& value,
52                            scoped_refptr<TrackedCallback> callback) OVERRIDE;
53
54  // TCPSocketResourceBase implementation.
55  virtual PP_Resource CreateAcceptedSocket(
56      int pending_host_id,
57      const PP_NetAddress_Private& local_addr,
58      const PP_NetAddress_Private& remote_addr) OVERRIDE;
59
60 private:
61  // C-tor used for accepted sockets.
62  TCPSocketResource(Connection connection,
63                    PP_Instance instance,
64                    int pending_host_id,
65                    const PP_NetAddress_Private& local_addr,
66                    const PP_NetAddress_Private& remote_addr);
67
68  DISALLOW_COPY_AND_ASSIGN(TCPSocketResource);
69};
70
71}  // namespace proxy
72}  // namespace ppapi
73
74#endif  // PPAPI_PROXY_TCP_SOCKET_RESOURCE_H_
75