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 12 namespace ppapi { 13 namespace proxy { 14 15 namespace { 16 17 typedef thunk::EnterResourceNoLock<thunk::PPB_NetAddress_API> 18 EnterNetAddressNoLock; 19 20 } // namespace 21 22 UDPSocketResource::UDPSocketResource(Connection connection, 23 PP_Instance instance) 24 : UDPSocketResourceBase(connection, instance, false) { 25 } 26 27 UDPSocketResource::~UDPSocketResource() { 28 } 29 30 thunk::PPB_UDPSocket_API* UDPSocketResource::AsPPB_UDPSocket_API() { 31 return this; 32 } 33 34 int32_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 43 PP_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 55 int32_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 62 int32_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 74 void UDPSocketResource::Close() { 75 CloseImpl(); 76 } 77 78 int32_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