1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file.
4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ppapi/proxy/tcp_socket_private_resource.h"
6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/shared_impl/ppb_tcp_socket_shared.h"
9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace ppapi {
11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace proxy {
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TCPSocketPrivateResource::TCPSocketPrivateResource(Connection connection,
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                                   PP_Instance instance)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    : TCPSocketResourceBase(connection, instance, TCP_SOCKET_VERSION_PRIVATE) {
16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SendCreate(BROWSER, PpapiHostMsg_TCPSocket_CreatePrivate());
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TCPSocketPrivateResource::TCPSocketPrivateResource(
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    Connection connection,
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_Instance instance,
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    int pending_resource_id,
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const PP_NetAddress_Private& local_addr,
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const PP_NetAddress_Private& remote_addr)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    : TCPSocketResourceBase(connection, instance, TCP_SOCKET_VERSION_PRIVATE,
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            local_addr, remote_addr) {
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  AttachToPendingHost(BROWSER, pending_resource_id);
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TCPSocketPrivateResource::~TCPSocketPrivateResource() {
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)thunk::PPB_TCPSocket_Private_API*
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TCPSocketPrivateResource::AsPPB_TCPSocket_Private_API() {
35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return this;
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::Connect(
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const char* host,
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    uint16_t port,
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return ConnectImpl(host, port, callback);
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::ConnectWithNetAddress(
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const PP_NetAddress_Private* addr,
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return ConnectWithNetAddressImpl(addr, callback);
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)PP_Bool TCPSocketPrivateResource::GetLocalAddress(
52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_NetAddress_Private* local_addr) {
53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return GetLocalAddressImpl(local_addr);
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)PP_Bool TCPSocketPrivateResource::GetRemoteAddress(
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_NetAddress_Private* remote_addr) {
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return GetRemoteAddressImpl(remote_addr);
59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::SSLHandshake(
62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const char* server_name,
63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    uint16_t server_port,
64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return SSLHandshakeImpl(server_name, server_port, callback);
66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)PP_Resource TCPSocketPrivateResource::GetServerCertificate() {
69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return GetServerCertificateImpl();
70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)PP_Bool TCPSocketPrivateResource::AddChainBuildingCertificate(
73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_Resource certificate,
74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_Bool trusted) {
75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return AddChainBuildingCertificateImpl(certificate, trusted);
76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::Read(
79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    char* buffer,
80424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    int32_t bytes_to_read,
81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return ReadImpl(buffer, bytes_to_read, callback);
83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::Write(
86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const char* buffer,
87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    int32_t bytes_to_write,
88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return WriteImpl(buffer, bytes_to_write, callback);
90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TCPSocketPrivateResource::Disconnect() {
9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  CloseImpl();
94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)int32_t TCPSocketPrivateResource::SetOption(
97424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    PP_TCPSocketOption_Private name,
98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const PP_Var& value,
99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  switch (name) {
101424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case PP_TCPSOCKETOPTION_PRIVATE_INVALID:
102424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return PP_ERROR_BADARGUMENT;
103424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case PP_TCPSOCKETOPTION_PRIVATE_NO_DELAY:
104424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return SetOptionImpl(PP_TCPSOCKET_OPTION_NO_DELAY, value, callback);
105424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    default:
106424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      NOTREACHED();
107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return PP_ERROR_BADARGUMENT;
108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PP_Resource TCPSocketPrivateResource::CreateAcceptedSocket(
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    int /* pending_host_id */,
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const PP_NetAddress_Private& /* local_addr */,
11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const PP_NetAddress_Private& /* remote_addr */) {
11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  NOTREACHED();
11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return 0;
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace proxy
120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace ppapi
121