1// Copyright (c) 2012 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/shared_impl/private/tcp_socket_private_impl.h"
6
7#include "base/logging.h"
8#include "ppapi/c/pp_errors.h"
9
10namespace ppapi {
11
12TCPSocketPrivateImpl::TCPSocketPrivateImpl(PP_Instance instance,
13                                           uint32 socket_id)
14    : Resource(OBJECT_IS_IMPL, instance),
15      TCPSocketShared(OBJECT_IS_IMPL, socket_id) {
16}
17
18TCPSocketPrivateImpl::TCPSocketPrivateImpl(const HostResource& resource,
19                                           uint32 socket_id)
20    : Resource(OBJECT_IS_PROXY, resource),
21      TCPSocketShared(OBJECT_IS_PROXY, socket_id) {
22}
23
24TCPSocketPrivateImpl::~TCPSocketPrivateImpl() {
25}
26
27thunk::PPB_TCPSocket_Private_API*
28TCPSocketPrivateImpl::AsPPB_TCPSocket_Private_API() {
29  return this;
30}
31
32int32_t TCPSocketPrivateImpl::Connect(const char* host,
33                                      uint16_t port,
34                                      scoped_refptr<TrackedCallback> callback) {
35  return ConnectImpl(host, port, callback);
36}
37
38int32_t TCPSocketPrivateImpl::ConnectWithNetAddress(
39    const PP_NetAddress_Private* addr,
40    scoped_refptr<TrackedCallback> callback) {
41  return ConnectWithNetAddressImpl(addr, callback);
42}
43
44PP_Bool TCPSocketPrivateImpl::GetLocalAddress(
45    PP_NetAddress_Private* local_addr) {
46  return GetLocalAddressImpl(local_addr);
47}
48
49PP_Bool TCPSocketPrivateImpl::GetRemoteAddress(
50    PP_NetAddress_Private* remote_addr) {
51  return GetRemoteAddressImpl(remote_addr);
52}
53
54int32_t TCPSocketPrivateImpl::SSLHandshake(
55    const char* server_name,
56    uint16_t server_port,
57    scoped_refptr<TrackedCallback> callback) {
58  return SSLHandshakeImpl(server_name, server_port, callback);
59}
60
61PP_Resource TCPSocketPrivateImpl::GetServerCertificate() {
62  return GetServerCertificateImpl();
63}
64
65PP_Bool TCPSocketPrivateImpl::AddChainBuildingCertificate(
66    PP_Resource certificate,
67    PP_Bool trusted) {
68  return AddChainBuildingCertificateImpl(certificate, trusted);
69}
70
71int32_t TCPSocketPrivateImpl::Read(char* buffer,
72                                   int32_t bytes_to_read,
73                                   scoped_refptr<TrackedCallback> callback) {
74  return ReadImpl(buffer, bytes_to_read, callback);
75}
76
77int32_t TCPSocketPrivateImpl::Write(const char* buffer,
78                                    int32_t bytes_to_write,
79                                    scoped_refptr<TrackedCallback> callback) {
80  return WriteImpl(buffer, bytes_to_write, callback);
81}
82
83void TCPSocketPrivateImpl::Disconnect() {
84  DisconnectImpl();
85}
86
87int32_t TCPSocketPrivateImpl::SetOption(
88    PP_TCPSocketOption_Private name,
89    const PP_Var& value,
90    scoped_refptr<TrackedCallback> callback) {
91  switch (name) {
92    case PP_TCPSOCKETOPTION_PRIVATE_INVALID:
93      return PP_ERROR_BADARGUMENT;
94    case PP_TCPSOCKETOPTION_PRIVATE_NO_DELAY:
95      return SetOptionImpl(PP_TCPSOCKET_OPTION_NO_DELAY, value, callback);
96    default:
97      NOTREACHED();
98      return PP_ERROR_BADARGUMENT;
99  }
100}
101
102Resource* TCPSocketPrivateImpl::GetOwnerResource() {
103  return this;
104}
105
106int32_t TCPSocketPrivateImpl::OverridePPError(int32_t pp_error) {
107  // PPB_TCPSocket_Private treats all errors from the browser process as
108  // PP_ERROR_FAILED.
109  if (pp_error < 0)
110    return PP_ERROR_FAILED;
111
112  return pp_error;
113}
114
115}  // namespace ppapi
116