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