diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-24 17:45:17 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-24 17:45:17 +0000 |
commit | 2ded2ee298c09a45032fe6cdf8349370f01003d3 (patch) | |
tree | f3b56fa88fd313e8a6a54480ef633796b0e43ada /ppapi | |
parent | cb1877e708a8cdd8af37f1e9cd1373c36ef08c0f (diff) | |
download | chromium_src-2ded2ee298c09a45032fe6cdf8349370f01003d3.zip chromium_src-2ded2ee298c09a45032fe6cdf8349370f01003d3.tar.gz chromium_src-2ded2ee298c09a45032fe6cdf8349370f01003d3.tar.bz2 |
NaCl proxy for PPB_NetAddress_Private_1_1
Review URL: https://chromiumcodereview.appspot.com/9808028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128763 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
9 files changed, 332 insertions, 0 deletions
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_net_address_private_rpc_server.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_net_address_private_rpc_server.cc index f8ca72b..5a30213a 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_net_address_private_rpc_server.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_net_address_private_rpc_server.cc @@ -252,3 +252,87 @@ void PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_GetAddress( rpc->result = NACL_SRPC_RESULT_OK; } +void PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_GetScopeID( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + // input + nacl_abi_size_t addr_bytes, char* addr, + // output + int32_t* scope_id) { + NaClSrpcClosureRunner runner(done); + rpc->result = NACL_SRPC_RESULT_APP_ERROR; + + if (addr_bytes != + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private))) { + return; + } + + *scope_id = PPBNetAddressPrivateInterface()->GetScopeID( + reinterpret_cast<PP_NetAddress_Private*>(addr)); + + DebugPrintf("PPB_NetAddress_Private::GetScopeID\n"); + + rpc->result = NACL_SRPC_RESULT_OK; +} + +void +PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_CreateFromIPv4Address( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + // input + nacl_abi_size_t ip_bytes, char* ip, + int32_t port, + // output + nacl_abi_size_t* addr_bytes, char* addr) { + NaClSrpcClosureRunner runner(done); + rpc->result = NACL_SRPC_RESULT_APP_ERROR; + + if (ip_bytes != static_cast<nacl_abi_size_t>(4)) + return; + if (port < 0 || port > std::numeric_limits<uint16_t>::max()) + return; + if (*addr_bytes != + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private))) { + return; + } + + PPBNetAddressPrivateInterface()->CreateFromIPv4Address( + reinterpret_cast<uint8_t*>(addr), static_cast<uint16_t>(port), + reinterpret_cast<PP_NetAddress_Private*>(addr)); + + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv4Address\n"); + + rpc->result = NACL_SRPC_RESULT_OK; +} + +void +PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_CreateFromIPv6Address( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + // input + nacl_abi_size_t ip_bytes, char* ip, + int32_t scope_id, + int32_t port, + // output + nacl_abi_size_t* addr_bytes, char* addr) { + NaClSrpcClosureRunner runner(done); + rpc->result = NACL_SRPC_RESULT_APP_ERROR; + + if (ip_bytes != static_cast<nacl_abi_size_t>(16)) + return; + if (port < 0 || port > std::numeric_limits<uint16_t>::max()) + return; + if (*addr_bytes != + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private))) { + return; + } + + PPBNetAddressPrivateInterface()->CreateFromIPv6Address( + reinterpret_cast<uint8_t*>(addr), static_cast<uint32_t>(scope_id), + static_cast<uint16_t>(port), + reinterpret_cast<PP_NetAddress_Private*>(addr)); + + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv6Address\n"); + + rpc->result = NACL_SRPC_RESULT_OK; +} 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 341c959..2f2a9b1 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc @@ -94,6 +94,8 @@ InterfaceMapElement interface_map[] = { PluginNetAddressPrivate::GetInterface0_1(), true }, { PPB_NETADDRESS_PRIVATE_INTERFACE_1_0, PluginNetAddressPrivate::GetInterface1_0(), true }, + { PPB_NETADDRESS_PRIVATE_INTERFACE_1_1, + PluginNetAddressPrivate::GetInterface1_1(), true }, { PPB_OPENGLES2_INTERFACE_1_0, PluginGraphics3D::GetOpenGLESInterface(), true }, { PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE_1_0, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.cc index 557775e..8df1836b 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.cc @@ -227,6 +227,74 @@ PP_Bool GetAddress(const PP_NetAddress_Private* addr, return PP_FALSE; } +uint32_t GetScopeID(const PP_NetAddress_Private* addr) { + DebugPrintf("PPB_NetAddress_Private::GetScopeID\n"); + + nacl_abi_size_t addr_bytes = + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private)); + char* const raw_addr = + reinterpret_cast<char*>(const_cast<PP_NetAddress_Private*>(addr)); + int32_t scope_id; + + NaClSrpcError srpc_result = + PpbNetAddressPrivateRpcClient::PPB_NetAddress_Private_GetScopeID( + GetMainSrpcChannel(), + addr_bytes, + raw_addr, &scope_id); + + DebugPrintf("PPB_NetAddress_Private::GetScopeID: %s\n", + NaClSrpcErrorString(srpc_result)); + + return static_cast<uint32_t>(scope_id); +} + +void CreateFromIPv4Address(const uint8_t ip[4], + uint16_t port, + struct PP_NetAddress_Private* addr) { + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv4Address\n"); + + char* raw_ip = reinterpret_cast<char*>(const_cast<uint8_t*>(ip)); + + nacl_abi_size_t addr_bytes = + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private)); + char* const raw_addr = + reinterpret_cast<char*>(const_cast<PP_NetAddress_Private*>(addr)); + + NaClSrpcError srpc_result = + PpbNetAddressPrivateRpcClient:: + PPB_NetAddress_Private_CreateFromIPv4Address( + GetMainSrpcChannel(), + sizeof(ip), raw_ip, port, + &addr_bytes, raw_addr); + + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv4Address: %s\n", + NaClSrpcErrorString(srpc_result)); +} + +void CreateFromIPv6Address(const uint8_t ip[16], + uint32_t scope_id, + uint16_t port, + struct PP_NetAddress_Private* addr) { + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv6Address\n"); + + char* raw_ip = reinterpret_cast<char*>(const_cast<uint8_t*>(ip)); + + nacl_abi_size_t addr_bytes = + static_cast<nacl_abi_size_t>(sizeof(PP_NetAddress_Private)); + char* const raw_addr = + reinterpret_cast<char*>(const_cast<PP_NetAddress_Private*>(addr)); + + NaClSrpcError srpc_result = + PpbNetAddressPrivateRpcClient:: + PPB_NetAddress_Private_CreateFromIPv6Address( + GetMainSrpcChannel(), + sizeof(ip), raw_ip, scope_id, port, + &addr_bytes, raw_addr); + + DebugPrintf("PPB_NetAddress_Private::CreateFromIPv6Address: %s\n", + NaClSrpcErrorString(srpc_result)); +} + } // namespace // static @@ -256,4 +324,22 @@ const PPB_NetAddress_Private_1_0* PluginNetAddressPrivate::GetInterface1_0() { return &netaddress_private_interface; } +// static +const PPB_NetAddress_Private_1_1* PluginNetAddressPrivate::GetInterface1_1() { + static const PPB_NetAddress_Private_1_1 netaddress_private_interface = { + AreEqual, + AreHostsEqual, + Describe, + ReplacePort, + GetAnyAddress, + GetFamily, + GetPort, + GetAddress, + GetScopeID, + CreateFromIPv4Address, + CreateFromIPv6Address + }; + return &netaddress_private_interface; +} + } // namespace ppapi_proxy diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.h b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.h index e08d3b2..98d5eeb 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.h +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_net_address_private.h @@ -15,6 +15,7 @@ class PluginNetAddressPrivate { public: static const PPB_NetAddress_Private_0_1* GetInterface0_1(); static const PPB_NetAddress_Private_1_0* GetInterface1_0(); + static const PPB_NetAddress_Private_1_1* GetInterface1_1(); private: NACL_DISALLOW_COPY_AND_ASSIGN(PluginNetAddressPrivate); diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppb_net_address_private.srpc b/ppapi/native_client/src/shared/ppapi_proxy/ppb_net_address_private.srpc index a587c37..0ac722b 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppb_net_address_private.srpc +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppb_net_address_private.srpc @@ -63,5 +63,26 @@ ['success', 'int32_t'], # PP_Bool ] }, + {'name': 'PPB_NetAddress_Private_GetScopeID', + 'inputs': [['addr', 'char[]'], # PP_NetAddress_Private* + ], + 'outputs': [['scope_id', 'int32_t'], # uint32_t + ] + }, + {'name': 'PPB_NetAddress_Private_CreateFromIPv4Address', + 'inputs': [['ip', 'char[]'], # uint8_t[4] + ['port', 'int32_t'], # uint16_t + ], + 'outputs': [['addr', 'char[]'], # PP_NetAddress_Private* + ] + }, + {'name': 'PPB_NetAddress_Private_CreateFromIPv6Address', + 'inputs': [['ip', 'char[]'], # uint8_t[16] + ['scope_id', 'int32_t'], # uint32_t + ['port', 'int32_t'], # uint16_t + ], + 'outputs': [['addr', 'char[]'], # PP_NetAddress_Private* + ] + }, ] } 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 477692d..c869403 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 @@ -2231,6 +2231,63 @@ NaClSrpcError PpbNetAddressPrivateRpcClient::PPB_NetAddress_Private_GetAddress( return retval; } +NaClSrpcError PpbNetAddressPrivateRpcClient::PPB_NetAddress_Private_GetScopeID( + NaClSrpcChannel* channel, + nacl_abi_size_t addr_bytes, char* addr, + int32_t* scope_id) { + VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(), + ("%s: PPAPI calls are not supported off the main thread\n", + __FUNCTION__)); + NaClSrpcError retval; + retval = NaClSrpcInvokeBySignature( + channel, + "PPB_NetAddress_Private_GetScopeID:C:i", + addr_bytes, addr, + scope_id + ); + return retval; +} + +NaClSrpcError PpbNetAddressPrivateRpcClient::PPB_NetAddress_Private_CreateFromIPv4Address( + NaClSrpcChannel* channel, + nacl_abi_size_t ip_bytes, char* ip, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr) { + VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(), + ("%s: PPAPI calls are not supported off the main thread\n", + __FUNCTION__)); + NaClSrpcError retval; + retval = NaClSrpcInvokeBySignature( + channel, + "PPB_NetAddress_Private_CreateFromIPv4Address:Ci:C", + ip_bytes, ip, + port, + addr_bytes, addr + ); + return retval; +} + +NaClSrpcError PpbNetAddressPrivateRpcClient::PPB_NetAddress_Private_CreateFromIPv6Address( + NaClSrpcChannel* channel, + nacl_abi_size_t ip_bytes, char* ip, + int32_t scope_id, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr) { + VCHECK(ppapi_proxy::PPBCoreInterface()->IsMainThread(), + ("%s: PPAPI calls are not supported off the main thread\n", + __FUNCTION__)); + NaClSrpcError retval; + retval = NaClSrpcInvokeBySignature( + channel, + "PPB_NetAddress_Private_CreateFromIPv6Address:Cii:C", + ip_bytes, ip, + scope_id, + port, + addr_bytes, addr + ); + return retval; +} + NaClSrpcError PpbPdfRpcClient::PPB_PDF_GetLocalizedString( NaClSrpcChannel* channel, PP_Instance instance, 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 6ec70bc..d059fca 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 @@ -1782,6 +1782,51 @@ static void PPB_NetAddress_Private_GetAddressDispatcher( ); } +static void PPB_NetAddress_Private_GetScopeIDDispatcher( + NaClSrpcRpc* rpc, + NaClSrpcArg** inputs, + NaClSrpcArg** outputs, + NaClSrpcClosure* done +) { + PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_GetScopeID( + rpc, + done, + inputs[0]->u.count, inputs[0]->arrays.carr, + &(outputs[0]->u.ival) + ); +} + +static void PPB_NetAddress_Private_CreateFromIPv4AddressDispatcher( + NaClSrpcRpc* rpc, + NaClSrpcArg** inputs, + NaClSrpcArg** outputs, + NaClSrpcClosure* done +) { + PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_CreateFromIPv4Address( + rpc, + done, + inputs[0]->u.count, inputs[0]->arrays.carr, + inputs[1]->u.ival, + &(outputs[0]->u.count), outputs[0]->arrays.carr + ); +} + +static void PPB_NetAddress_Private_CreateFromIPv6AddressDispatcher( + NaClSrpcRpc* rpc, + NaClSrpcArg** inputs, + NaClSrpcArg** outputs, + NaClSrpcClosure* done +) { + PpbNetAddressPrivateRpcServer::PPB_NetAddress_Private_CreateFromIPv6Address( + rpc, + done, + inputs[0]->u.count, inputs[0]->arrays.carr, + inputs[1]->u.ival, + inputs[2]->u.ival, + &(outputs[0]->u.count), outputs[0]->arrays.carr + ); +} + static void PPB_PDF_GetLocalizedStringDispatcher( NaClSrpcRpc* rpc, NaClSrpcArg** inputs, @@ -3237,6 +3282,9 @@ NaClSrpcHandlerDesc PpbRpcs::srpc_methods[] = { { "PPB_NetAddress_Private_GetFamily:C:i", PPB_NetAddress_Private_GetFamilyDispatcher }, { "PPB_NetAddress_Private_GetPort:C:i", PPB_NetAddress_Private_GetPortDispatcher }, { "PPB_NetAddress_Private_GetAddress:C:Ci", PPB_NetAddress_Private_GetAddressDispatcher }, + { "PPB_NetAddress_Private_GetScopeID:C:i", PPB_NetAddress_Private_GetScopeIDDispatcher }, + { "PPB_NetAddress_Private_CreateFromIPv4Address:Ci:C", PPB_NetAddress_Private_CreateFromIPv4AddressDispatcher }, + { "PPB_NetAddress_Private_CreateFromIPv6Address:Cii:C", PPB_NetAddress_Private_CreateFromIPv6AddressDispatcher }, { "PPB_PDF_GetLocalizedString:ii:C", PPB_PDF_GetLocalizedStringDispatcher }, { "PPB_PDF_GetResourceImage:ii:i", PPB_PDF_GetResourceImageDispatcher }, { "PPB_PDF_GetFontFileWithFallback:iCCi:i", PPB_PDF_GetFontFileWithFallbackDispatcher }, 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 7731ded..863f907 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 @@ -914,6 +914,24 @@ class PpbNetAddressPrivateRpcServer { nacl_abi_size_t addr_bytes, char* addr, nacl_abi_size_t* address_bytes, char* address, int32_t* success); + static void PPB_NetAddress_Private_GetScopeID( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + nacl_abi_size_t addr_bytes, char* addr, + int32_t* scope_id); + static void PPB_NetAddress_Private_CreateFromIPv4Address( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + nacl_abi_size_t ip_bytes, char* ip, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr); + static void PPB_NetAddress_Private_CreateFromIPv6Address( + NaClSrpcRpc* rpc, + NaClSrpcClosure* done, + nacl_abi_size_t ip_bytes, char* ip, + int32_t scope_id, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr); private: PpbNetAddressPrivateRpcServer(); 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 1b6a485..288455f 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 @@ -799,6 +799,21 @@ class PpbNetAddressPrivateRpcClient { nacl_abi_size_t addr_bytes, char* addr, nacl_abi_size_t* address_bytes, char* address, int32_t* success); + static NaClSrpcError PPB_NetAddress_Private_GetScopeID( + NaClSrpcChannel* channel, + nacl_abi_size_t addr_bytes, char* addr, + int32_t* scope_id); + static NaClSrpcError PPB_NetAddress_Private_CreateFromIPv4Address( + NaClSrpcChannel* channel, + nacl_abi_size_t ip_bytes, char* ip, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr); + static NaClSrpcError PPB_NetAddress_Private_CreateFromIPv6Address( + NaClSrpcChannel* channel, + nacl_abi_size_t ip_bytes, char* ip, + int32_t scope_id, + int32_t port, + nacl_abi_size_t* addr_bytes, char* addr); private: PpbNetAddressPrivateRpcClient(); |