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_PRIVATE_RESOURCE_H_
6#define PPAPI_PROXY_TCP_SOCKET_PRIVATE_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_private_api.h"
12
13namespace ppapi {
14namespace proxy {
15
16class PPAPI_PROXY_EXPORT TCPSocketPrivateResource
17    : public thunk::PPB_TCPSocket_Private_API,
18      public TCPSocketResourceBase {
19 public:
20  // C-tor used for new sockets.
21  TCPSocketPrivateResource(Connection connection, PP_Instance instance);
22
23  // C-tor used for already accepted sockets.
24  TCPSocketPrivateResource(Connection connection,
25                           PP_Instance instance,
26                           int pending_resource_id,
27                           const PP_NetAddress_Private& local_addr,
28                           const PP_NetAddress_Private& remote_addr);
29
30  virtual ~TCPSocketPrivateResource();
31
32  // PluginResource overrides.
33  virtual PPB_TCPSocket_Private_API* AsPPB_TCPSocket_Private_API() OVERRIDE;
34
35  // PPB_TCPSocket_Private_API implementation.
36  virtual int32_t Connect(const char* host,
37                          uint16_t port,
38                          scoped_refptr<TrackedCallback> callback) OVERRIDE;
39  virtual int32_t ConnectWithNetAddress(
40      const PP_NetAddress_Private* addr,
41      scoped_refptr<TrackedCallback> callback) OVERRIDE;
42  virtual PP_Bool GetLocalAddress(PP_NetAddress_Private* local_addr) OVERRIDE;
43  virtual PP_Bool GetRemoteAddress(PP_NetAddress_Private* remote_addr) OVERRIDE;
44  virtual int32_t SSLHandshake(
45      const char* server_name,
46      uint16_t server_port,
47      scoped_refptr<TrackedCallback> callback) OVERRIDE;
48  virtual PP_Resource GetServerCertificate() OVERRIDE;
49  virtual PP_Bool AddChainBuildingCertificate(PP_Resource certificate,
50                                              PP_Bool trusted) OVERRIDE;
51  virtual int32_t Read(char* buffer,
52                      int32_t bytes_to_read,
53                      scoped_refptr<TrackedCallback> callback) OVERRIDE;
54  virtual int32_t Write(const char* buffer,
55                        int32_t bytes_to_write,
56                        scoped_refptr<TrackedCallback> callback) OVERRIDE;
57  virtual void Disconnect() OVERRIDE;
58  virtual int32_t SetOption(PP_TCPSocketOption_Private name,
59                            const PP_Var& value,
60                            scoped_refptr<TrackedCallback> callback) OVERRIDE;
61
62  // TCPSocketResourceBase implementation.
63  virtual PP_Resource CreateAcceptedSocket(
64      int pending_host_id,
65      const PP_NetAddress_Private& local_addr,
66      const PP_NetAddress_Private& remote_addr) OVERRIDE;
67
68 private:
69  DISALLOW_COPY_AND_ASSIGN(TCPSocketPrivateResource);
70};
71
72}  // namespace proxy
73}  // namespace ppapi
74
75#endif  // PPAPI_PROXY_TCP_SOCKET_PRIVATE_RESOURCE_H_
76