OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include "native_client/src/trusted/reverse_service/reverse_service.h" | 7 #include "native_client/src/trusted/reverse_service/reverse_service.h" |
8 | 8 |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
11 #include <limits> | 11 #include <limits> |
12 #include <string> | 12 #include <string> |
13 | 13 |
14 #include "native_client/src/include/nacl_compiler_annotations.h" | 14 #include "native_client/src/include/nacl_compiler_annotations.h" |
15 #include "native_client/src/include/nacl_scoped_ptr.h" | 15 #include "native_client/src/include/nacl_scoped_ptr.h" |
16 #include "native_client/src/include/portability_io.h" | 16 #include "native_client/src/include/portability_io.h" |
17 #include "native_client/src/shared/platform/nacl_check.h" | 17 #include "native_client/src/shared/platform/nacl_check.h" |
18 #include "native_client/src/shared/platform/nacl_host_desc.h" | 18 #include "native_client/src/shared/platform/nacl_host_desc.h" |
19 #include "native_client/src/shared/platform/nacl_log.h" | 19 #include "native_client/src/shared/platform/nacl_log.h" |
20 #include "native_client/src/shared/platform/nacl_sync.h" | 20 #include "native_client/src/shared/platform/nacl_sync.h" |
21 #include "native_client/src/shared/platform/nacl_sync_checked.h" | 21 #include "native_client/src/shared/platform/nacl_sync_checked.h" |
22 #include "native_client/src/shared/platform/nacl_threads.h" | 22 #include "native_client/src/shared/platform/nacl_threads.h" |
23 #include "native_client/src/shared/srpc/nacl_srpc.h" | 23 #include "native_client/src/shared/srpc/nacl_srpc.h" |
24 | 24 |
25 #include "native_client/src/trusted/desc/nacl_desc_invalid.h" | 25 #include "native_client/src/trusted/desc/nacl_desc_invalid.h" |
26 #include "native_client/src/trusted/desc/nacl_desc_io.h" | 26 #include "native_client/src/trusted/desc/nacl_desc_io.h" |
27 | 27 |
| 28 #include "native_client/src/trusted/reverse_service/nacl_file_info.h" |
28 #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" | 29 #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" |
29 | 30 |
30 namespace { | 31 namespace { |
31 | 32 |
32 // ReverseInterfaceWrapper wraps a C++ interface and provides | 33 // ReverseInterfaceWrapper wraps a C++ interface and provides |
33 // C-callable wrapper functions for use by the underlying C | 34 // C-callable wrapper functions for use by the underlying C |
34 // implementation. | 35 // implementation. |
35 | 36 |
36 struct ReverseInterfaceWrapper { | 37 struct ReverseInterfaceWrapper { |
37 NaClReverseInterface base NACL_IS_REFCOUNT_SUBCLASS; | 38 NaClReverseInterface base NACL_IS_REFCOUNT_SUBCLASS; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 } | 93 } |
93 strncpy(buffer + size, it->c_str(), to_write); | 94 strncpy(buffer + size, it->c_str(), to_write); |
94 NaClLog(3, "EnumerateManifestKeys: %.*s\n", (int) to_write, buffer + size); | 95 NaClLog(3, "EnumerateManifestKeys: %.*s\n", (int) to_write, buffer + size); |
95 size += to_write; | 96 size += to_write; |
96 } | 97 } |
97 return size; | 98 return size; |
98 } | 99 } |
99 | 100 |
100 int OpenManifestEntry(NaClReverseInterface* self, | 101 int OpenManifestEntry(NaClReverseInterface* self, |
101 char const* url_key, | 102 char const* url_key, |
102 int32_t* out_desc) { | 103 struct NaClFileInfo* info) { |
103 ReverseInterfaceWrapper* wrapper = | 104 ReverseInterfaceWrapper* wrapper = |
104 reinterpret_cast<ReverseInterfaceWrapper*>(self); | 105 reinterpret_cast<ReverseInterfaceWrapper*>(self); |
105 if (NULL == wrapper->iface) { | 106 if (NULL == wrapper->iface) { |
106 NaClLog(1, "OpenManifestEntry, no reverse_interface.\n"); | 107 NaClLog(1, "OpenManifestEntry, no reverse_interface.\n"); |
107 return 0; | 108 return 0; |
108 } | 109 } |
109 return wrapper->iface->OpenManifestEntry(nacl::string(url_key), out_desc); | 110 return wrapper->iface->OpenManifestEntry(nacl::string(url_key), info); |
110 } | 111 } |
111 | 112 |
112 int CloseManifestEntry(NaClReverseInterface* self, | 113 int CloseManifestEntry(NaClReverseInterface* self, |
113 int32_t desc) { | 114 int32_t desc) { |
114 ReverseInterfaceWrapper* wrapper = | 115 ReverseInterfaceWrapper* wrapper = |
115 reinterpret_cast<ReverseInterfaceWrapper*>(self); | 116 reinterpret_cast<ReverseInterfaceWrapper*>(self); |
116 if (NULL == wrapper->iface) { | 117 if (NULL == wrapper->iface) { |
117 NaClLog(1, "CloseManifestEntry, no reverse_interface.\n"); | 118 NaClLog(1, "CloseManifestEntry, no reverse_interface.\n"); |
118 return 0; | 119 return 0; |
119 } | 120 } |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 276 |
276 NaClLog(4, "VTBL\n"); | 277 NaClLog(4, "VTBL\n"); |
277 NaClLog(4, "Leaving ReverseInterfaceWrapperCtor\n"); | 278 NaClLog(4, "Leaving ReverseInterfaceWrapperCtor\n"); |
278 return 1; | 279 return 1; |
279 } | 280 } |
280 | 281 |
281 } // namespace | 282 } // namespace |
282 | 283 |
283 namespace nacl { | 284 namespace nacl { |
284 | 285 |
| 286 // TODO(ncbray) remove |
| 287 bool ReverseInterface::OpenManifestEntry(nacl::string url_key, |
| 288 int32_t* out_desc) { |
| 289 UNREFERENCED_PARAMETER(url_key); |
| 290 *out_desc = -1; |
| 291 return false; |
| 292 } |
| 293 |
| 294 // TODO(ncbray) convert to a pure virtual. |
| 295 bool ReverseInterface::OpenManifestEntry(nacl::string url_key, |
| 296 struct NaClFileInfo* info) { |
| 297 info->nonce = 0; |
| 298 return OpenManifestEntry(url_key, &info->desc); |
| 299 } |
| 300 |
285 ReverseService::ReverseService(DescWrapper* conn_cap, | 301 ReverseService::ReverseService(DescWrapper* conn_cap, |
286 ReverseInterface* rif) | 302 ReverseInterface* rif) |
287 : service_(NULL), | 303 : service_(NULL), |
288 reverse_interface_(rif) { | 304 reverse_interface_(rif) { |
289 NaClLog(4, "ReverseService::ReverseService ctor invoked\n"); | 305 NaClLog(4, "ReverseService::ReverseService ctor invoked\n"); |
290 | 306 |
291 ReverseInterfaceWrapper* wrapper = | 307 ReverseInterfaceWrapper* wrapper = |
292 reinterpret_cast<ReverseInterfaceWrapper*>(malloc(sizeof *wrapper)); | 308 reinterpret_cast<ReverseInterfaceWrapper*>(malloc(sizeof *wrapper)); |
293 if (NULL == wrapper) { | 309 if (NULL == wrapper) { |
294 NaClLog(LOG_FATAL, "ReverseService::ReverseService: malloc failed\n"); | 310 NaClLog(LOG_FATAL, "ReverseService::ReverseService: malloc failed\n"); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | 343 |
328 void ReverseService::IncrThreadCount() { | 344 void ReverseService::IncrThreadCount() { |
329 NACL_VTBL(NaClReverseService, service_)->ThreadCountIncr(service_); | 345 NACL_VTBL(NaClReverseService, service_)->ThreadCountIncr(service_); |
330 } | 346 } |
331 | 347 |
332 void ReverseService::DecrThreadCount() { | 348 void ReverseService::DecrThreadCount() { |
333 NACL_VTBL(NaClReverseService, service_)->ThreadCountDecr(service_); | 349 NACL_VTBL(NaClReverseService, service_)->ThreadCountDecr(service_); |
334 } | 350 } |
335 | 351 |
336 } // namespace nacl | 352 } // namespace nacl |
OLD | NEW |