| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Native Client Authors. All rights reserved. | 2 * Copyright 2008 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can | 3 * Use of this source code is governed by a BSD-style license that can |
| 4 * be found in the LICENSE file. | 4 * be found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 | 7 |
| 8 #include <signal.h> | 8 #include <signal.h> |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 #include "native_client/src/trusted/plugin/srpc/browser_interface.h" | 10 #include "native_client/src/trusted/plugin/srpc/browser_interface.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 reinterpret_cast<plugin::SocketAddress*>(obj); | 23 reinterpret_cast<plugin::SocketAddress*>(obj); |
| 24 plugin::ScriptableHandle* connected_socket = socket_addr->Connect(); | 24 plugin::ScriptableHandle* connected_socket = socket_addr->Connect(); |
| 25 if (NULL == connected_socket) { | 25 if (NULL == connected_socket) { |
| 26 return false; | 26 return false; |
| 27 } | 27 } |
| 28 params->outs()[0]->tag = NACL_SRPC_ARG_TYPE_OBJECT; | 28 params->outs()[0]->tag = NACL_SRPC_ARG_TYPE_OBJECT; |
| 29 params->outs()[0]->u.oval = connected_socket; | 29 params->outs()[0]->u.oval = connected_socket; |
| 30 return true; | 30 return true; |
| 31 } | 31 } |
| 32 | 32 |
| 33 bool RpcToString(void* obj, plugin::SrpcParams *params) { | |
| 34 plugin::SocketAddress* socket_addr = | |
| 35 reinterpret_cast<plugin::SocketAddress*>(obj); | |
| 36 const char* str = socket_addr->wrapper()->conn_cap_path(); | |
| 37 if (NULL == str) { | |
| 38 return false; | |
| 39 } | |
| 40 size_t len = strnlen(str, NACL_PATH_MAX); | |
| 41 // strnlen ensures that len <= NACL_PATH_MAX < SIZE_T_MAX, so no overflow. | |
| 42 char* ret_string = reinterpret_cast<char*>(malloc(len + 1)); | |
| 43 if (NULL == ret_string) { | |
| 44 return false; | |
| 45 } | |
| 46 strncpy(ret_string, str, len + 1); | |
| 47 params->outs()[0]->tag = NACL_SRPC_ARG_TYPE_STRING; | |
| 48 params->outs()[0]->u.sval = ret_string; | |
| 49 return true; | |
| 50 } | |
| 51 | |
| 52 } // namespace | 33 } // namespace |
| 53 | 34 |
| 54 namespace plugin { | 35 namespace plugin { |
| 55 | 36 |
| 56 SocketAddress* SocketAddress::New(Plugin* plugin, nacl::DescWrapper* wrapper) { | 37 SocketAddress* SocketAddress::New(Plugin* plugin, nacl::DescWrapper* wrapper) { |
| 57 PLUGIN_PRINTF(("SocketAddress::New()\n")); | 38 PLUGIN_PRINTF(("SocketAddress::New()\n")); |
| 58 SocketAddress* socket_address = new(std::nothrow) SocketAddress(); | 39 SocketAddress* socket_address = new(std::nothrow) SocketAddress(); |
| 59 if (socket_address == NULL || !socket_address->Init(plugin, wrapper)) { | 40 if (socket_address == NULL || !socket_address->Init(plugin, wrapper)) { |
| 60 delete socket_address; | 41 delete socket_address; |
| 61 return NULL; | 42 return NULL; |
| 62 } | 43 } |
| 63 return socket_address; | 44 return socket_address; |
| 64 } | 45 } |
| 65 | 46 |
| 66 bool SocketAddress::Init(Plugin* plugin, nacl::DescWrapper* wrapper) { | 47 bool SocketAddress::Init(Plugin* plugin, nacl::DescWrapper* wrapper) { |
| 67 if (!DescBasedHandle::Init(plugin, wrapper)) { | 48 if (!DescBasedHandle::Init(plugin, wrapper)) { |
| 68 return false; | 49 return false; |
| 69 } | 50 } |
| 70 LoadMethods(); | 51 LoadMethods(); |
| 71 return true; | 52 return true; |
| 72 } | 53 } |
| 73 | 54 |
| 74 void SocketAddress::LoadMethods() { | 55 void SocketAddress::LoadMethods() { |
| 75 // Methods implemented by SocketAddresses. | 56 // Methods implemented by SocketAddresses. |
| 76 AddMethodCall(RpcConnect, "connect", "", "h"); | 57 AddMethodCall(RpcConnect, "connect", "", "h"); |
| 77 AddMethodCall(RpcToString, "toString", "", "s"); | |
| 78 } | 58 } |
| 79 | 59 |
| 80 SocketAddress::SocketAddress() { | 60 SocketAddress::SocketAddress() { |
| 81 PLUGIN_PRINTF(("SocketAddress::SocketAddress(%p)\n", | 61 PLUGIN_PRINTF(("SocketAddress::SocketAddress(%p)\n", |
| 82 static_cast<void*>(this))); | 62 static_cast<void*>(this))); |
| 83 } | 63 } |
| 84 | 64 |
| 85 SocketAddress::~SocketAddress() { | 65 SocketAddress::~SocketAddress() { |
| 86 PLUGIN_PRINTF(("SocketAddress::~SocketAddress(%p)\n", | 66 PLUGIN_PRINTF(("SocketAddress::~SocketAddress(%p)\n", |
| 87 static_cast<void*>(this))); | 67 static_cast<void*>(this))); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 102 ScriptableHandle* connected_socket = | 82 ScriptableHandle* connected_socket = |
| 103 plugin()->browser_interface()->NewScriptableHandle( | 83 plugin()->browser_interface()->NewScriptableHandle( |
| 104 portable_connected_socket); | 84 portable_connected_socket); |
| 105 PLUGIN_PRINTF(("SocketAddress::Connect: CS returned %p\n", | 85 PLUGIN_PRINTF(("SocketAddress::Connect: CS returned %p\n", |
| 106 static_cast<void*>(connected_socket))); | 86 static_cast<void*>(connected_socket))); |
| 107 return connected_socket; | 87 return connected_socket; |
| 108 } | 88 } |
| 109 } | 89 } |
| 110 | 90 |
| 111 } // namespace plugin | 91 } // namespace plugin |
| OLD | NEW |