12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/udp_socket_private_resource.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_udp_socket.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ppapi { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace proxy { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::UDPSocketPrivateResource(Connection connection, 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Instance instance) 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : UDPSocketResourceBase(connection, instance, true) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::~UDPSocketPrivateResource() { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)thunk::PPB_UDPSocket_Private_API* 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::AsPPB_UDPSocket_Private_API() { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::SetSocketFeature( 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_UDPSocketFeature_Private name, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Var value) { 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_UDPSocket_Option public_name = PP_UDPSOCKET_OPTION_ADDRESS_REUSE; 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switch (name) { 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PP_UDPSOCKETFEATURE_PRIVATE_ADDRESS_REUSE: 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |public_name| has been initialized above. 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch break; 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PP_UDPSOCKETFEATURE_PRIVATE_BROADCAST: 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public_name = PP_UDPSOCKET_OPTION_BROADCAST; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch break; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PP_UDPSOCKETFEATURE_PRIVATE_COUNT: 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ERROR_BADARGUMENT; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch default: 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NOTREACHED(); 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ERROR_BADARGUMENT; 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32_t result = SetOptionImpl(public_name, value, NULL); 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return result == PP_OK_COMPLETIONPENDING ? PP_OK : result; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::Bind( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private* addr, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return BindImpl(addr, callback); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool UDPSocketPrivateResource::GetBoundAddress(PP_NetAddress_Private* addr) { 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return GetBoundAddressImpl(addr); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::RecvFrom( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char* buffer, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t num_bytes, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return RecvFromImpl(buffer, num_bytes, NULL, callback); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool UDPSocketPrivateResource::GetRecvFromAddress( 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_NetAddress_Private* addr) { 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return GetRecvFromAddressImpl(addr); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::SendTo( 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* buffer, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t num_bytes, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private* addr, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return SendToImpl(buffer, num_bytes, addr, callback); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UDPSocketPrivateResource::Close() { 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CloseImpl(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace proxy 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ppapi 84