| OLD | NEW |
| 1 // Copyright (c) 2010 The Native Client Authors. All rights reserved. | 1 // Copyright (c) 2010 The Native Client Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdarg.h> | 5 #include <stdarg.h> |
| 6 | 6 |
| 7 #include "native_client/src/include/portability.h" | 7 #include "native_client/src/include/portability.h" |
| 8 #include "native_client/src/include/portability_process.h" | 8 #include "native_client/src/include/portability_process.h" |
| 9 #include "srpcgen/ppp_rpc.h" | 9 #include "srpcgen/ppp_rpc.h" |
| 10 #include "native_client/src/shared/ppapi_proxy/plugin_getinterface.h" | 10 #include "native_client/src/shared/ppapi_proxy/plugin_getinterface.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 NaClSrpcServiceDtor(service); | 43 NaClSrpcServiceDtor(service); |
| 44 channel->client = NULL; | 44 channel->client = NULL; |
| 45 ppapi_proxy::SetMainSrpcChannel(NULL); | 45 ppapi_proxy::SetMainSrpcChannel(NULL); |
| 46 } | 46 } |
| 47 | 47 |
| 48 // The plugin will make asynchronous calls to the browser on other threads. | 48 // The plugin will make asynchronous calls to the browser on other threads. |
| 49 // The service exported on this channel will be gotten by service discovery. | 49 // The service exported on this channel will be gotten by service discovery. |
| 50 bool StartUpcallSrpcChannel(NaClSrpcImcDescType upcall_channel_desc) { | 50 bool StartUpcallSrpcChannel(NaClSrpcImcDescType upcall_channel_desc) { |
| 51 // Create the upcall srpc client. | 51 // Create the upcall srpc client. |
| 52 if (upcall_channel_desc == -1) { | 52 if (upcall_channel_desc == -1) { |
| 53 DebugPrintf(" Bad upcall_channel_desc\n"); | |
| 54 return false; | 53 return false; |
| 55 } | 54 } |
| 56 NaClSrpcChannel* upcall_channel = reinterpret_cast<NaClSrpcChannel*>( | 55 NaClSrpcChannel* upcall_channel = reinterpret_cast<NaClSrpcChannel*>( |
| 57 calloc(1, sizeof(*upcall_channel))); | 56 calloc(1, sizeof(*upcall_channel))); |
| 58 if (NULL == upcall_channel) { | 57 if (NULL == upcall_channel) { |
| 59 return false; | 58 return false; |
| 60 } | 59 } |
| 61 if (!NaClSrpcClientCtor(upcall_channel, upcall_channel_desc)) { | 60 if (!NaClSrpcClientCtor(upcall_channel, upcall_channel_desc)) { |
| 62 free(upcall_channel); | 61 free(upcall_channel); |
| 63 return false; | 62 return false; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 82 NaClSrpcRpc* rpc, | 81 NaClSrpcRpc* rpc, |
| 83 NaClSrpcClosure* done, | 82 NaClSrpcClosure* done, |
| 84 int32_t pid, | 83 int32_t pid, |
| 85 int64_t module, | 84 int64_t module, |
| 86 NaClSrpcImcDescType upcall_channel_desc, | 85 NaClSrpcImcDescType upcall_channel_desc, |
| 87 char* service_description, | 86 char* service_description, |
| 88 int32_t* nacl_pid, | 87 int32_t* nacl_pid, |
| 89 int32_t* success) { | 88 int32_t* success) { |
| 90 NaClSrpcClosureRunner runner(done); | 89 NaClSrpcClosureRunner runner(done); |
| 91 rpc->result = NACL_SRPC_RESULT_APP_ERROR; | 90 rpc->result = NACL_SRPC_RESULT_APP_ERROR; |
| 92 DebugPrintf("PPP_InitializeModule: %s\n", service_description); | 91 DebugPrintf("Plugin::PPP_InitializeModule: %s\n", service_description); |
| 93 // Set up the service for calling back into the browser. | 92 // Set up the service for calling back into the browser. |
| 94 if (!StartMainSrpcChannel(const_cast<const char*>(service_description), | 93 if (!StartMainSrpcChannel(const_cast<const char*>(service_description), |
| 95 rpc->channel)) { | 94 rpc->channel)) { |
| 96 DebugPrintf(" Failed to export service on main channel\n"); | 95 DebugPrintf("Plugin::PPP_InitializeModule: " |
| 96 "failed to export service on main channel\n"); |
| 97 return; | 97 return; |
| 98 } | 98 } |
| 99 // Set up the upcall channel for calling back into the browser. | 99 // Set up the upcall channel for calling back into the browser. |
| 100 if (!StartUpcallSrpcChannel(upcall_channel_desc)) { | 100 if (!StartUpcallSrpcChannel(upcall_channel_desc)) { |
| 101 DebugPrintf(" Failed to construct upcall channel\n"); | 101 DebugPrintf("Plugin::PPP_InitializeModule: " |
| 102 "failed to construct upcall channel\n"); |
| 102 StopMainSrpcChannel(); | 103 StopMainSrpcChannel(); |
| 103 return; | 104 return; |
| 104 } | 105 } |
| 105 ppapi_proxy::SetModuleIdForSrpcChannel(rpc->channel, module); | 106 ppapi_proxy::SetModuleIdForSrpcChannel(rpc->channel, module); |
| 106 *success = ::PPP_InitializeModule(module, ppapi_proxy::GetInterfaceProxy); | 107 *success = ::PPP_InitializeModule(module, ppapi_proxy::GetInterfaceProxy); |
| 107 *nacl_pid = GETPID(); | 108 *nacl_pid = GETPID(); |
| 108 rpc->result = NACL_SRPC_RESULT_OK; | 109 rpc->result = NACL_SRPC_RESULT_OK; |
| 109 } | 110 } |
| 110 | 111 |
| 111 void PppRpcServer::PPP_ShutdownModule(NaClSrpcRpc* rpc, | 112 void PppRpcServer::PPP_ShutdownModule(NaClSrpcRpc* rpc, |
| 112 NaClSrpcClosure* done) { | 113 NaClSrpcClosure* done) { |
| 113 NaClSrpcClosureRunner runner(done); | 114 NaClSrpcClosureRunner runner(done); |
| 114 rpc->result = NACL_SRPC_RESULT_APP_ERROR; | 115 rpc->result = NACL_SRPC_RESULT_APP_ERROR; |
| 115 DebugPrintf("PPP_ShutdownModule\n"); | 116 DebugPrintf("Plugin::PPP_ShutdownModule\n"); |
| 116 ::PPP_ShutdownModule(); | 117 ::PPP_ShutdownModule(); |
| 117 ppapi_proxy::UnsetModuleIdForSrpcChannel(rpc->channel); | 118 ppapi_proxy::UnsetModuleIdForSrpcChannel(rpc->channel); |
| 118 StopUpcallSrpcChannel(); | 119 StopUpcallSrpcChannel(); |
| 119 StopMainSrpcChannel(); | 120 StopMainSrpcChannel(); |
| 120 rpc->result = NACL_SRPC_RESULT_OK; | 121 rpc->result = NACL_SRPC_RESULT_OK; |
| 121 } | 122 } |
| 122 | 123 |
| 123 void PppRpcServer::PPP_GetInterface(NaClSrpcRpc* rpc, | 124 void PppRpcServer::PPP_GetInterface(NaClSrpcRpc* rpc, |
| 124 NaClSrpcClosure* done, | 125 NaClSrpcClosure* done, |
| 125 char* interface_name, | 126 char* interface_name, |
| 126 int32_t* exports_interface_name) { | 127 int32_t* exports_interface_name) { |
| 127 NaClSrpcClosureRunner runner(done); | 128 NaClSrpcClosureRunner runner(done); |
| 128 rpc->result = NACL_SRPC_RESULT_APP_ERROR; | 129 rpc->result = NACL_SRPC_RESULT_APP_ERROR; |
| 129 DebugPrintf("PPP_GetInterface(%s)\n", interface_name); | 130 DebugPrintf("Plugin::PPP_GetInterface(%s)\n", interface_name); |
| 130 // Since the proxy will make calls to proxied interfaces, we need simply | 131 // Since the proxy will make calls to proxied interfaces, we need simply |
| 131 // to know whether the plugin exports a given interface. | 132 // to know whether the plugin exports a given interface. |
| 132 const void* plugin_interface = ::PPP_GetInterface(interface_name); | 133 const void* plugin_interface = ::PPP_GetInterface(interface_name); |
| 133 *exports_interface_name = (plugin_interface != NULL); | 134 *exports_interface_name = (plugin_interface != NULL); |
| 134 rpc->result = NACL_SRPC_RESULT_OK; | 135 rpc->result = NACL_SRPC_RESULT_OK; |
| 135 } | 136 } |
| OLD | NEW |