diff options
author | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-31 08:55:28 +0000 |
---|---|---|
committer | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-31 08:55:28 +0000 |
commit | 0addda9b12e46523d2f9967709d69dd1b5fb71e1 (patch) | |
tree | c533faf1fd41b8bbd343efe7a65634bfe181ecb4 /ppapi/native_client | |
parent | ae3e7bc278b7a13b9e5c36cdd5cda6a780f46096 (diff) | |
download | chromium_src-0addda9b12e46523d2f9967709d69dd1b5fb71e1.zip chromium_src-0addda9b12e46523d2f9967709d69dd1b5fb71e1.tar.gz chromium_src-0addda9b12e46523d2f9967709d69dd1b5fb71e1.tar.bz2 |
AllowBroadcast() is exposed to NaCl.
BUG=136797
TEST=browser_tests:*.UDPSocketPrivate
Review URL: https://chromiumcodereview.appspot.com/10735056
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154407 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/native_client')
9 files changed, 141 insertions, 0 deletions
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_udp_socket_private_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_udp_socket_private_rpc_server.cc index 11bd80c..2137e5d 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_udp_socket_private_rpc_server.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_udp_socket_private_rpc_server.cc @@ -10,6 +10,7 @@ #include "native_client/src/include/nacl_macros.h" #include "native_client/src/shared/ppapi_proxy/browser_callback.h" #include "native_client/src/shared/ppapi_proxy/browser_globals.h" +#include "native_client/src/shared/ppapi_proxy/object_serialize.h" #include "native_client/src/shared/ppapi_proxy/utility.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_errors.h" @@ -18,6 +19,7 @@ using ppapi_proxy::DebugPrintf; using ppapi_proxy::DeleteRemoteCallbackInfo; +using ppapi_proxy::DeserializeTo; using ppapi_proxy::MakeRemoteCompletionCallback; using ppapi_proxy::PPBUDPSocketPrivateInterface; @@ -54,6 +56,39 @@ void PpbUDPSocketPrivateRpcServer::PPB_UDPSocket_Private_IsUDPSocket( "is_udp_socket=%d\n", *is_udp_socket); } +void PpbUDPSocketPrivateRpcServer::PPB_UDPSocket_Private_SetSocketFeature( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + // inputs + PP_Resource udp_socket, + int32_t name, + nacl_abi_size_t value_bytes, char* value, + // output + int32_t* pp_error) { + NaClSrpcClosureRunner runner(done); + rpc->result = NACL_SRPC_RESULT_APP_ERROR; + + if (name < 0 || name >= PP_UDPSOCKETFEATURE_COUNT) { + *pp_error = PP_ERROR_BADARGUMENT; + rpc->result = NACL_SRPC_RESULT_OK; + return; + } + + PP_Var pp_value = PP_MakeUndefined(); + if (!DeserializeTo(value, value_bytes, 1, &pp_value)) + return; + + *pp_error = PPBUDPSocketPrivateInterface()->SetSocketFeature( + udp_socket, + static_cast<PP_UDPSocketFeature_Private>(name), + pp_value); + + DebugPrintf("PPB_UDPSocket_Private::SetSocketFeature: " + "pp_error=%"NACL_PRId32"\n", *pp_error); + + rpc->result = NACL_SRPC_RESULT_OK; +} + void PpbUDPSocketPrivateRpcServer::PPB_UDPSocket_Private_Bind( NaClSrpcRpc* rpc, NaClSrpcClosure* done, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc index aa0e8a1..cb2f837 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc @@ -132,6 +132,8 @@ InterfaceMapElement interface_map[] = { PluginUDPSocketPrivate::GetInterface0_2(), true }, { PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3, PluginUDPSocketPrivate::GetInterface0_3(), true }, + { PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4, + PluginUDPSocketPrivate::GetInterface0_4(), true }, { PPB_URLLOADER_INTERFACE, PluginURLLoader::GetInterface(), true }, { PPB_URLREQUESTINFO_INTERFACE, PluginURLRequestInfo::GetInterface(), true }, { PPB_URLRESPONSEINFO_INTERFACE, PluginURLResponseInfo::GetInterface(), diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.cc index f38dcc0..49bde4c 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.cc @@ -5,8 +5,11 @@ #include "native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h" #include <string.h> + #include "native_client/src/include/nacl_macros.h" +#include "native_client/src/include/nacl_scoped_ptr.h" #include "native_client/src/include/portability.h" +#include "native_client/src/shared/ppapi_proxy/object_serialize.h" #include "native_client/src/shared/ppapi_proxy/plugin_callback.h" #include "native_client/src/shared/ppapi_proxy/plugin_globals.h" #include "native_client/src/shared/ppapi_proxy/utility.h" @@ -57,6 +60,32 @@ PP_Bool IsUDPSocket(PP_Resource resource_id) { return PP_FALSE; } +int32_t SetSocketFeature(PP_Resource udp_socket, + PP_UDPSocketFeature_Private name, + struct PP_Var value) { + DebugPrintf("PPB_UDPSocket_Private::SetSocketFeature: ", + "udp_socket=%"NACL_PRId32"\n", udp_socket); + + nacl_abi_size_t value_size; + nacl::scoped_array<char> value_bytes(Serialize(&value, 1, &value_size)); + + int32_t pp_error = PP_ERROR_FAILED; + NaClSrpcError srpc_result = + PpbUDPSocketPrivateRpcClient::PPB_UDPSocket_Private_SetSocketFeature( + GetMainSrpcChannel(), + udp_socket, + name, + value_size, value_bytes.get(), + &pp_error); + + DebugPrintf("PPB_UDPSocket_Private::SetSocketFeature: %s\n", + NaClSrpcErrorString(srpc_result)); + + if (srpc_result != NACL_SRPC_RESULT_OK) + pp_error = PP_ERROR_FAILED; + return pp_error; +} + int32_t Bind(PP_Resource udp_socket, const struct PP_NetAddress_Private* addr, struct PP_CompletionCallback callback) { DebugPrintf("PPB_UDPSocket_Private::Bind: " @@ -248,4 +277,19 @@ const PPB_UDPSocket_Private_0_3* PluginUDPSocketPrivate::GetInterface0_3() { return &udpsocket_private_interface; } +const PPB_UDPSocket_Private_0_4* PluginUDPSocketPrivate::GetInterface0_4() { + static const PPB_UDPSocket_Private_0_4 udpsocket_private_interface = { + Create, + IsUDPSocket, + SetSocketFeature, + Bind, + GetBoundAddress, + RecvFrom, + GetRecvFromAddress, + SendTo, + Close + }; + return &udpsocket_private_interface; +} + } // namespace ppapi_proxy diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h index 7e87382..4f9287e 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h @@ -15,6 +15,7 @@ class PluginUDPSocketPrivate { public: static const PPB_UDPSocket_Private_0_2* GetInterface0_2(); static const PPB_UDPSocket_Private_0_3* GetInterface0_3(); + static const PPB_UDPSocket_Private_0_4* GetInterface0_4(); private: NACL_DISALLOW_COPY_AND_ASSIGN(PluginUDPSocketPrivate); diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc index 45f7933..ac50015 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc @@ -2797,6 +2797,27 @@ NaClSrpcError PpbUDPSocketPrivateRpcClient::PPB_UDPSocket_Private_IsUDPSocket( return retval; } +NaClSrpcError PpbUDPSocketPrivateRpcClient::PPB_UDPSocket_Private_SetSocketFeature( + NaClSrpcChannel* channel, + PP_Resource udp_socket, + int32_t name, + nacl_abi_size_t value_bytes, char* value, + int32_t* pp_error) { + VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(), + ("%s: PPAPI calls are not supported off the main thread\n", + __FUNCTION__)); + NaClSrpcError retval; + retval = NaClSrpcInvokeBySignature( + channel, + "PPB_UDPSocket_Private_SetSocketFeature:iiC:i", + udp_socket, + name, + value_bytes, value, + pp_error + ); + return retval; +} + NaClSrpcError PpbUDPSocketPrivateRpcClient::PPB_UDPSocket_Private_Bind( NaClSrpcChannel* channel, PP_Resource udp_socket, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc index 10be251..da42e3d 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc @@ -2234,6 +2234,22 @@ static void PPB_UDPSocket_Private_IsUDPSocketDispatcher( ); } +static void PPB_UDPSocket_Private_SetSocketFeatureDispatcher( + NaClSrpcRpc* rpc, + NaClSrpcArg** inputs, + NaClSrpcArg** outputs, + NaClSrpcClosure* done +) { + PpbUDPSocketPrivateRpcServer::PPB_UDPSocket_Private_SetSocketFeature( + rpc, + done, + inputs[0]->u.ival, + inputs[1]->u.ival, + inputs[2]->u.count, inputs[2]->arrays.carr, + &(outputs[0]->u.ival) + ); +} + static void PPB_UDPSocket_Private_BindDispatcher( NaClSrpcRpc* rpc, NaClSrpcArg** inputs, @@ -2985,6 +3001,7 @@ NaClSrpcHandlerDesc PpbRpcs::srpc_methods[] = { { "PPB_Testing_GetDocumentURL:i:CC", PPB_Testing_GetDocumentURLDispatcher }, { "PPB_UDPSocket_Private_Create:i:i", PPB_UDPSocket_Private_CreateDispatcher }, { "PPB_UDPSocket_Private_IsUDPSocket:i:i", PPB_UDPSocket_Private_IsUDPSocketDispatcher }, + { "PPB_UDPSocket_Private_SetSocketFeature:iiC:i", PPB_UDPSocket_Private_SetSocketFeatureDispatcher }, { "PPB_UDPSocket_Private_Bind:iCi:i", PPB_UDPSocket_Private_BindDispatcher }, { "PPB_UDPSocket_Private_GetBoundAddress:i:Ci", PPB_UDPSocket_Private_GetBoundAddressDispatcher }, { "PPB_UDPSocket_Private_RecvFrom:iii:Ci", PPB_UDPSocket_Private_RecvFromDispatcher }, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_udp_socket_private.srpc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_udp_socket_private.srpc index 3e5a27b..395012c7 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_udp_socket_private.srpc +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_udp_socket_private.srpc @@ -20,6 +20,14 @@ 'outputs': [['is_udp_socket_private', 'int32_t'], # PP_Bool ] }, + {'name': 'PPB_UDPSocket_Private_SetSocketFeature', + 'inputs': [['udp_socket', 'PP_Resource'], # PP_Resource + ['name', 'int32_t'], # PP_UDPSocketFeature_Private + ['value', 'char[]'], # PP_Var + ], + 'outputs': [['pp_error', 'int32_t'], + ] + }, {'name': 'PPB_UDPSocket_Private_Bind', 'inputs': [['udp_socket', 'PP_Resource'], # PP_Resource ['addr', 'char[]'], # PP_NetAddress_Private* diff --git a/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h b/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h index cf9c614..028ac86 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h +++ b/ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h @@ -1137,6 +1137,13 @@ class PpbUDPSocketPrivateRpcServer { NaClSrpcClosure* done, PP_Resource resource_id, int32_t* is_udp_socket_private); + static void PPB_UDPSocket_Private_SetSocketFeature( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + PP_Resource udp_socket, + int32_t name, + nacl_abi_size_t value_bytes, char* value, + int32_t* pp_error); static void PPB_UDPSocket_Private_Bind( NaClSrpcRpc* rpc, NaClSrpcClosure* done, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h b/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h index 54f5cb2..e4b6644 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h +++ b/ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h @@ -992,6 +992,12 @@ class PpbUDPSocketPrivateRpcClient { NaClSrpcChannel* channel, PP_Resource resource_id, int32_t* is_udp_socket_private); + static NaClSrpcError PPB_UDPSocket_Private_SetSocketFeature( + NaClSrpcChannel* channel, + PP_Resource udp_socket, + int32_t name, + nacl_abi_size_t value_bytes, char* value, + int32_t* pp_error); static NaClSrpcError PPB_UDPSocket_Private_Bind( NaClSrpcChannel* channel, PP_Resource udp_socket, |