summaryrefslogtreecommitdiffstats
path: root/ppapi/native_client
diff options
context:
space:
mode:
authorygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 08:55:28 +0000
committerygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 08:55:28 +0000
commit0addda9b12e46523d2f9967709d69dd1b5fb71e1 (patch)
treec533faf1fd41b8bbd343efe7a65634bfe181ecb4 /ppapi/native_client
parentae3e7bc278b7a13b9e5c36cdd5cda6a780f46096 (diff)
downloadchromium_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')
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_udp_socket_private_rpc_server.cc35
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc2
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.cc44
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_udp_socket_private.h1
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_client.cc21
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_rpc_server.cc17
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/ppb_udp_socket_private.srpc8
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/trusted/srpcgen/ppb_rpc.h7
-rw-r--r--ppapi/native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h6
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,