udp_socket_resource.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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/udp_socket_resource.h" 6 7#include "ppapi/shared_impl/tracked_callback.h" 8#include "ppapi/thunk/enter.h" 9#include "ppapi/thunk/ppb_net_address_api.h" 10#include "ppapi/thunk/resource_creation_api.h" 11 12namespace ppapi { 13namespace proxy { 14 15namespace { 16 17typedef thunk::EnterResourceNoLock<thunk::PPB_NetAddress_API> 18 EnterNetAddressNoLock; 19 20} // namespace 21 22UDPSocketResource::UDPSocketResource(Connection connection, 23 PP_Instance instance) 24 : UDPSocketResourceBase(connection, instance, false) { 25} 26 27UDPSocketResource::~UDPSocketResource() { 28} 29 30thunk::PPB_UDPSocket_API* UDPSocketResource::AsPPB_UDPSocket_API() { 31 return this; 32} 33 34int32_t UDPSocketResource::Bind(PP_Resource addr, 35 scoped_refptr<TrackedCallback> callback) { 36 EnterNetAddressNoLock enter(addr, true); 37 if (enter.failed()) 38 return PP_ERROR_BADARGUMENT; 39 40 return BindImpl(&enter.object()->GetNetAddressPrivate(), callback); 41} 42 43PP_Resource UDPSocketResource::GetBoundAddress() { 44 PP_NetAddress_Private addr_private; 45 if (!GetBoundAddressImpl(&addr_private)) 46 return 0; 47 48 thunk::EnterResourceCreationNoLock enter(pp_instance()); 49 if (enter.failed()) 50 return 0; 51 return enter.functions()->CreateNetAddressFromNetAddressPrivate( 52 pp_instance(), addr_private); 53} 54 55int32_t UDPSocketResource::RecvFrom(char* buffer, 56 int32_t num_bytes, 57 PP_Resource* addr, 58 scoped_refptr<TrackedCallback> callback) { 59 return RecvFromImpl(buffer, num_bytes, addr, callback); 60} 61 62int32_t UDPSocketResource::SendTo(const char* buffer, 63 int32_t num_bytes, 64 PP_Resource addr, 65 scoped_refptr<TrackedCallback> callback) { 66 EnterNetAddressNoLock enter(addr, true); 67 if (enter.failed()) 68 return PP_ERROR_BADARGUMENT; 69 70 return SendToImpl(buffer, num_bytes, &enter.object()->GetNetAddressPrivate(), 71 callback); 72} 73 74void UDPSocketResource::Close() { 75 CloseImpl(); 76} 77 78int32_t UDPSocketResource::SetOption( 79 PP_UDPSocket_Option name, 80 const PP_Var& value, 81 scoped_refptr<TrackedCallback> callback) { 82 return SetOptionImpl(name, value, callback); 83} 84 85} // namespace proxy 86} // namespace ppapi 87