| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (c) 2011 The Native Client Authors. All rights reserved. | |
| 3 * Use of this source code is governed by a BSD-style license that can be | |
| 4 * found in the LICENSE file. | |
| 5 */ | |
| 6 | |
| 7 #include "native_client/src/shared/srpc/nacl_srpc_ppapi_plugin_internal.h" | |
| 8 | |
| 9 #include <fcntl.h> | |
| 10 #include <unistd.h> | |
| 11 | |
| 12 #include "native_client/src/public/imc_syscalls.h" | |
| 13 #include "native_client/src/public/name_service.h" | |
| 14 #include "native_client/src/shared/platform/nacl_log.h" | |
| 15 #include "native_client/src/shared/srpc/nacl_srpc.h" | |
| 16 #include "native_client/src/shared/srpc/nacl_srpc_internal.h" | |
| 17 #include "native_client/src/trusted/service_runtime/include/sys/nacl_kernel_serv
ice.h" | |
| 18 | |
| 19 static int gNaClNameServiceConnCapDesc = -1; | |
| 20 | |
| 21 void NaClPluginLowLevelInitializationCompleteInternal(void) { | |
| 22 int nameservice_conn_desc; | |
| 23 int kernel_service_conn_cap_desc = -1; | |
| 24 int kernel_service_desc; | |
| 25 struct NaClSrpcChannel srpc_channel; | |
| 26 int status; | |
| 27 | |
| 28 NaClLog(4, "Entered NaClPluginLowLevelInitializationComplete\n"); | |
| 29 | |
| 30 if (-1 != gNaClNameServiceConnCapDesc) { | |
| 31 NaClLog(LOG_ERROR, | |
| 32 "Double call to NaClPluginLowLevelInitializationComplete?\n"); | |
| 33 return; | |
| 34 } | |
| 35 /* | |
| 36 * The existence of the bootstrap nameservice is independent of | |
| 37 * whether NaCl is running as a standalone application or running as | |
| 38 * a untrusted Pepper plugin, browser extension environment. | |
| 39 */ | |
| 40 if (-1 == nacl_nameservice(&gNaClNameServiceConnCapDesc)) { | |
| 41 NaClLog(LOG_FATAL, | |
| 42 "NaClPluginLowLevelInitializationComplete: no name service?!?\n"); | |
| 43 } | |
| 44 | |
| 45 nameservice_conn_desc = imc_connect(gNaClNameServiceConnCapDesc); | |
| 46 if (-1 == nameservice_conn_desc) { | |
| 47 NaClLog(LOG_FATAL, | |
| 48 "Could not connect to bootstrap name service\n"); | |
| 49 } | |
| 50 if (!NaClSrpcClientCtor(&srpc_channel, nameservice_conn_desc)) { | |
| 51 (void) close(nameservice_conn_desc); | |
| 52 NaClLog(LOG_FATAL, "SRPC channel ctor to name service failed\n"); | |
| 53 } | |
| 54 if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature( | |
| 55 &srpc_channel, | |
| 56 NACL_NAME_SERVICE_LOOKUP, | |
| 57 "KernelService", | |
| 58 O_RDWR, | |
| 59 &status, | |
| 60 &kernel_service_conn_cap_desc)) { | |
| 61 NaClSrpcDtor(&srpc_channel); | |
| 62 NaClLog(LOG_FATAL, "Name service lookup RPC for KernelService failed\n"); | |
| 63 } | |
| 64 NaClSrpcDtor(&srpc_channel); | |
| 65 if (-1 == kernel_service_conn_cap_desc) { | |
| 66 NaClLog(LOG_FATAL, "Name service lookup for KernelService failed, %d\n", | |
| 67 status); | |
| 68 } | |
| 69 if (-1 == (kernel_service_desc = imc_connect(kernel_service_conn_cap_desc))) { | |
| 70 (void) close(kernel_service_conn_cap_desc); | |
| 71 NaClLog(LOG_FATAL, "Connect to KernelService failed\n"); | |
| 72 } | |
| 73 (void) close(kernel_service_conn_cap_desc); | |
| 74 if (!NaClSrpcClientCtor(&srpc_channel, kernel_service_desc)) { | |
| 75 (void) close(kernel_service_desc); | |
| 76 NaClLog(LOG_FATAL, "SRPC channel ctor to KernelService failed\n"); | |
| 77 } | |
| 78 if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature( | |
| 79 &srpc_channel, | |
| 80 NACL_KERNEL_SERVICE_INITIALIZATION_COMPLETE)) { | |
| 81 NaClLog(LOG_FATAL, "KernelService init_done RPC failed!\n"); | |
| 82 } | |
| 83 NaClSrpcDtor(&srpc_channel); | |
| 84 } | |
| OLD | NEW |