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#include "ppapi/proxy/tcp_socket_private_resource.h"
6
7#include "ppapi/proxy/ppapi_messages.h"
8#include "ppapi/shared_impl/ppb_tcp_socket_shared.h"
9
10namespace ppapi {
11namespace proxy {
12
13TCPSocketPrivateResource::TCPSocketPrivateResource(Connection connection,
14                                                   PP_Instance instance)
15    : TCPSocketResourceBase(connection, instance, TCP_SOCKET_VERSION_PRIVATE) {
16  SendCreate(BROWSER, PpapiHostMsg_TCPSocket_CreatePrivate());
17}
18
19TCPSocketPrivateResource::TCPSocketPrivateResource(
20    Connection connection,
21    PP_Instance instance,
22    int pending_resource_id,
23    const PP_NetAddress_Private& local_addr,
24    const PP_NetAddress_Private& remote_addr)
25    : TCPSocketResourceBase(connection, instance, TCP_SOCKET_VERSION_PRIVATE,
26                            local_addr, remote_addr) {
27  AttachToPendingHost(BROWSER, pending_resource_id);
28}
29
30TCPSocketPrivateResource::~TCPSocketPrivateResource() {
31}
32
33thunk::PPB_TCPSocket_Private_API*
34TCPSocketPrivateResource::AsPPB_TCPSocket_Private_API() {
35  return this;
36}
37
38int32_t TCPSocketPrivateResource::Connect(
39    const char* host,
40    uint16_t port,
41    scoped_refptr<TrackedCallback> callback) {
42  return ConnectImpl(host, port, callback);
43}
44
45int32_t TCPSocketPrivateResource::ConnectWithNetAddress(
46    const PP_NetAddress_Private* addr,
47    scoped_refptr<TrackedCallback> callback) {
48  return ConnectWithNetAddressImpl(addr, callback);
49}
50
51PP_Bool TCPSocketPrivateResource::GetLocalAddress(
52    PP_NetAddress_Private* local_addr) {
53  return GetLocalAddressImpl(local_addr);
54}
55
56PP_Bool TCPSocketPrivateResource::GetRemoteAddress(
57    PP_NetAddress_Private* remote_addr) {
58  return GetRemoteAddressImpl(remote_addr);
59}
60
61int32_t TCPSocketPrivateResource::SSLHandshake(
62    const char* server_name,
63    uint16_t server_port,
64    scoped_refptr<TrackedCallback> callback) {
65  return SSLHandshakeImpl(server_name, server_port, callback);
66}
67
68PP_Resource TCPSocketPrivateResource::GetServerCertificate() {
69  return GetServerCertificateImpl();
70}
71
72PP_Bool TCPSocketPrivateResource::AddChainBuildingCertificate(
73    PP_Resource certificate,
74    PP_Bool trusted) {
75  return AddChainBuildingCertificateImpl(certificate, trusted);
76}
77
78int32_t TCPSocketPrivateResource::Read(
79    char* buffer,
80    int32_t bytes_to_read,
81    scoped_refptr<TrackedCallback> callback) {
82  return ReadImpl(buffer, bytes_to_read, callback);
83}
84
85int32_t TCPSocketPrivateResource::Write(
86    const char* buffer,
87    int32_t bytes_to_write,
88    scoped_refptr<TrackedCallback> callback) {
89  return WriteImpl(buffer, bytes_to_write, callback);
90}
91
92void TCPSocketPrivateResource::Disconnect() {
93  CloseImpl();
94}
95
96int32_t TCPSocketPrivateResource::SetOption(
97    PP_TCPSocketOption_Private name,
98    const PP_Var& value,
99    scoped_refptr<TrackedCallback> callback) {
100  switch (name) {
101    case PP_TCPSOCKETOPTION_PRIVATE_INVALID:
102      return PP_ERROR_BADARGUMENT;
103    case PP_TCPSOCKETOPTION_PRIVATE_NO_DELAY:
104      return SetOptionImpl(PP_TCPSOCKET_OPTION_NO_DELAY, value, callback);
105    default:
106      NOTREACHED();
107      return PP_ERROR_BADARGUMENT;
108  }
109}
110
111PP_Resource TCPSocketPrivateResource::CreateAcceptedSocket(
112    int /* pending_host_id */,
113    const PP_NetAddress_Private& /* local_addr */,
114    const PP_NetAddress_Private& /* remote_addr */) {
115  NOTREACHED();
116  return 0;
117}
118
119}  // namespace proxy
120}  // namespace ppapi
121