| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "bin/io_buffer.h" | 5 #include "bin/io_buffer.h" |
| 6 #include "bin/socket.h" | 6 #include "bin/socket.h" |
| 7 #include "bin/dartutils.h" | 7 #include "bin/dartutils.h" |
| 8 #include "bin/thread.h" | 8 #include "bin/thread.h" |
| 9 #include "bin/utils.h" | 9 #include "bin/utils.h" |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 intptr_t len; | 32 intptr_t len; |
| 33 Dart_Handle result = Dart_TypedDataAcquireData( | 33 Dart_Handle result = Dart_TypedDataAcquireData( |
| 34 obj, &data_type, reinterpret_cast<void**>(&data), &len); | 34 obj, &data_type, reinterpret_cast<void**>(&data), &len); |
| 35 if (Dart_IsError(result)) return result; | 35 if (Dart_IsError(result)) return result; |
| 36 memmove(reinterpret_cast<void *>(addr), data, len); | 36 memmove(reinterpret_cast<void *>(addr), data, len); |
| 37 return Dart_Null(); | 37 return Dart_Null(); |
| 38 } | 38 } |
| 39 | 39 |
| 40 | 40 |
| 41 void FUNCTION_NAME(InternetAddress_Fixed)(Dart_NativeArguments args) { | 41 void FUNCTION_NAME(InternetAddress_Fixed)(Dart_NativeArguments args) { |
| 42 Dart_EnterScope(); | |
| 43 Dart_Handle id_obj = Dart_GetNativeArgument(args, 0); | 42 Dart_Handle id_obj = Dart_GetNativeArgument(args, 0); |
| 44 ASSERT(!Dart_IsError(id_obj)); | 43 ASSERT(!Dart_IsError(id_obj)); |
| 45 int64_t id = 0; | 44 int64_t id = 0; |
| 46 bool ok = DartUtils::GetInt64Value(id_obj, &id); | 45 bool ok = DartUtils::GetInt64Value(id_obj, &id); |
| 47 ASSERT(ok); | 46 ASSERT(ok); |
| 48 USE(ok); | 47 USE(ok); |
| 49 RawAddr raw; | 48 RawAddr raw; |
| 50 memset(&raw, 0, sizeof(raw)); | 49 memset(&raw, 0, sizeof(raw)); |
| 51 switch (id) { | 50 switch (id) { |
| 52 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: { | 51 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 72 default: | 71 default: |
| 73 Dart_Handle error = DartUtils::NewDartArgumentError(""); | 72 Dart_Handle error = DartUtils::NewDartArgumentError(""); |
| 74 if (Dart_IsError(error)) Dart_PropagateError(error); | 73 if (Dart_IsError(error)) Dart_PropagateError(error); |
| 75 Dart_ThrowException(error); | 74 Dart_ThrowException(error); |
| 76 } | 75 } |
| 77 int len = SocketAddress::GetAddrLength(&raw); | 76 int len = SocketAddress::GetAddrLength(&raw); |
| 78 Dart_Handle result = Dart_NewTypedData(Dart_TypedData_kUint8, len); | 77 Dart_Handle result = Dart_NewTypedData(Dart_TypedData_kUint8, len); |
| 79 if (Dart_IsError(result)) Dart_PropagateError(result); | 78 if (Dart_IsError(result)) Dart_PropagateError(result); |
| 80 Dart_ListSetAsBytes(result, 0, reinterpret_cast<uint8_t *>(&raw), len); | 79 Dart_ListSetAsBytes(result, 0, reinterpret_cast<uint8_t *>(&raw), len); |
| 81 Dart_SetReturnValue(args, result); | 80 Dart_SetReturnValue(args, result); |
| 82 Dart_ExitScope(); | |
| 83 } | 81 } |
| 84 | 82 |
| 85 | 83 |
| 86 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { | 84 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { |
| 87 Dart_EnterScope(); | |
| 88 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 85 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 89 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); | 86 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); |
| 90 RawAddr addr; | 87 RawAddr addr; |
| 91 Dart_Handle result = GetSockAddr(host_obj, &addr); | 88 Dart_Handle result = GetSockAddr(host_obj, &addr); |
| 92 int64_t port = 0; | 89 int64_t port = 0; |
| 93 if (!Dart_IsError(result) && | 90 if (!Dart_IsError(result) && |
| 94 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) { | 91 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) { |
| 95 intptr_t socket = Socket::CreateConnect(addr, port); | 92 intptr_t socket = Socket::CreateConnect(addr, port); |
| 96 OSError error; | 93 OSError error; |
| 97 Dart_TypedDataReleaseData(host_obj); | 94 Dart_TypedDataReleaseData(host_obj); |
| 98 if (socket >= 0) { | 95 if (socket >= 0) { |
| 99 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); | 96 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); |
| 100 if (Dart_IsError(err)) Dart_PropagateError(err); | 97 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 101 Dart_SetReturnValue(args, Dart_True()); | 98 Dart_SetReturnValue(args, Dart_True()); |
| 102 } else { | 99 } else { |
| 103 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); | 100 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); |
| 104 } | 101 } |
| 105 } else { | 102 } else { |
| 106 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | 103 OSError os_error(-1, "Invalid argument", OSError::kUnknown); |
| 107 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | 104 Dart_Handle err = DartUtils::NewDartOSError(&os_error); |
| 108 if (Dart_IsError(err)) Dart_PropagateError(err); | 105 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 109 Dart_SetReturnValue(args, err); | 106 Dart_SetReturnValue(args, err); |
| 110 } | 107 } |
| 111 Dart_ExitScope(); | |
| 112 } | 108 } |
| 113 | 109 |
| 114 | 110 |
| 115 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { | 111 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { |
| 116 Dart_EnterScope(); | |
| 117 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 112 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 118 intptr_t socket = 0; | 113 intptr_t socket = 0; |
| 119 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 114 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 120 if (Dart_IsError(err)) Dart_PropagateError(err); | 115 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 121 intptr_t available = Socket::Available(socket); | 116 intptr_t available = Socket::Available(socket); |
| 122 if (available >= 0) { | 117 if (available >= 0) { |
| 123 Dart_SetReturnValue(args, Dart_NewInteger(available)); | 118 Dart_SetReturnValue(args, Dart_NewInteger(available)); |
| 124 } else { | 119 } else { |
| 125 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 120 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 126 } | 121 } |
| 127 Dart_ExitScope(); | |
| 128 } | 122 } |
| 129 | 123 |
| 130 | 124 |
| 131 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { | 125 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { |
| 132 Dart_EnterScope(); | |
| 133 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); | 126 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); |
| 134 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 127 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 135 intptr_t socket = 0; | 128 intptr_t socket = 0; |
| 136 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 129 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 137 if (Dart_IsError(err)) Dart_PropagateError(err); | 130 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 138 intptr_t available = Socket::Available(socket); | 131 intptr_t available = Socket::Available(socket); |
| 139 if (available > 0) { | 132 if (available > 0) { |
| 140 int64_t length = 0; | 133 int64_t length = 0; |
| 141 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); | 134 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); |
| 142 if (DartUtils::GetInt64Value(length_obj, &length)) { | 135 if (DartUtils::GetInt64Value(length_obj, &length)) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | 167 OSError os_error(-1, "Invalid argument", OSError::kUnknown); |
| 175 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | 168 Dart_Handle err = DartUtils::NewDartOSError(&os_error); |
| 176 if (Dart_IsError(err)) Dart_PropagateError(err); | 169 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 177 Dart_SetReturnValue(args, err); | 170 Dart_SetReturnValue(args, err); |
| 178 } | 171 } |
| 179 } else if (available == 0) { | 172 } else if (available == 0) { |
| 180 Dart_SetReturnValue(args, Dart_Null()); | 173 Dart_SetReturnValue(args, Dart_Null()); |
| 181 } else { | 174 } else { |
| 182 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 175 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 183 } | 176 } |
| 184 | |
| 185 Dart_ExitScope(); | |
| 186 } | 177 } |
| 187 | 178 |
| 188 | 179 |
| 189 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { | 180 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { |
| 190 Dart_EnterScope(); | |
| 191 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); | 181 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); |
| 192 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 182 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 193 intptr_t socket = 0; | 183 intptr_t socket = 0; |
| 194 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 184 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 195 if (Dart_IsError(err)) Dart_PropagateError(err); | 185 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 196 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); | 186 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); |
| 197 ASSERT(Dart_IsList(buffer_obj)); | 187 ASSERT(Dart_IsList(buffer_obj)); |
| 198 intptr_t offset = | 188 intptr_t offset = |
| 199 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); | 189 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); |
| 200 intptr_t length = | 190 intptr_t length = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 213 intptr_t bytes_written = Socket::Write(socket, buffer, length); | 203 intptr_t bytes_written = Socket::Write(socket, buffer, length); |
| 214 if (bytes_written >= 0) { | 204 if (bytes_written >= 0) { |
| 215 Dart_TypedDataReleaseData(buffer_obj); | 205 Dart_TypedDataReleaseData(buffer_obj); |
| 216 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); | 206 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); |
| 217 } else { | 207 } else { |
| 218 // Extract OSError before we release data, as it may override the error. | 208 // Extract OSError before we release data, as it may override the error. |
| 219 OSError os_error; | 209 OSError os_error; |
| 220 Dart_TypedDataReleaseData(buffer_obj); | 210 Dart_TypedDataReleaseData(buffer_obj); |
| 221 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); | 211 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); |
| 222 } | 212 } |
| 223 Dart_ExitScope(); | |
| 224 } | 213 } |
| 225 | 214 |
| 226 | 215 |
| 227 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { | 216 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { |
| 228 Dart_EnterScope(); | |
| 229 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 217 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 230 intptr_t socket = 0; | 218 intptr_t socket = 0; |
| 231 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 219 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 232 if (Dart_IsError(err)) Dart_PropagateError(err); | 220 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 233 OSError os_error; | 221 OSError os_error; |
| 234 intptr_t port = Socket::GetPort(socket); | 222 intptr_t port = Socket::GetPort(socket); |
| 235 if (port > 0) { | 223 if (port > 0) { |
| 236 Dart_SetReturnValue(args, Dart_NewInteger(port)); | 224 Dart_SetReturnValue(args, Dart_NewInteger(port)); |
| 237 } else { | 225 } else { |
| 238 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 226 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 239 } | 227 } |
| 240 Dart_ExitScope(); | |
| 241 } | 228 } |
| 242 | 229 |
| 243 | 230 |
| 244 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { | 231 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { |
| 245 Dart_EnterScope(); | |
| 246 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 232 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 247 intptr_t socket = 0; | 233 intptr_t socket = 0; |
| 248 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 234 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 249 if (Dart_IsError(err)) Dart_PropagateError(err); | 235 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 250 OSError os_error; | 236 OSError os_error; |
| 251 intptr_t port = 0; | 237 intptr_t port = 0; |
| 252 ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); | 238 ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); |
| 253 char host[INET6_ADDRSTRLEN]; | 239 char host[INET6_ADDRSTRLEN]; |
| 254 if (Socket::GetRemotePeer(socket, host, &port)) { | 240 if (Socket::GetRemotePeer(socket, host, &port)) { |
| 255 Dart_Handle list = Dart_NewList(2); | 241 Dart_Handle list = Dart_NewList(2); |
| 256 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); | 242 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); |
| 257 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); | 243 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); |
| 258 Dart_SetReturnValue(args, list); | 244 Dart_SetReturnValue(args, list); |
| 259 } else { | 245 } else { |
| 260 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 246 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 261 } | 247 } |
| 262 Dart_ExitScope(); | |
| 263 } | 248 } |
| 264 | 249 |
| 265 | 250 |
| 266 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { | 251 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { |
| 267 Dart_EnterScope(); | |
| 268 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 252 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 269 intptr_t socket = 0; | 253 intptr_t socket = 0; |
| 270 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 254 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 271 if (Dart_IsError(err)) Dart_PropagateError(err); | 255 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 272 OSError os_error; | 256 OSError os_error; |
| 273 Socket::GetError(socket, &os_error); | 257 Socket::GetError(socket, &os_error); |
| 274 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); | 258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); |
| 275 Dart_ExitScope(); | |
| 276 } | 259 } |
| 277 | 260 |
| 278 | 261 |
| 279 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { | 262 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { |
| 280 Dart_EnterScope(); | |
| 281 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 263 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 282 intptr_t socket = 0; | 264 intptr_t socket = 0; |
| 283 Socket::GetSocketIdNativeField(socket_obj, &socket); | 265 Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 284 OSError os_error; | 266 OSError os_error; |
| 285 intptr_t type = Socket::GetType(socket); | 267 intptr_t type = Socket::GetType(socket); |
| 286 if (type >= 0) { | 268 if (type >= 0) { |
| 287 Dart_SetReturnValue(args, Dart_NewInteger(type)); | 269 Dart_SetReturnValue(args, Dart_NewInteger(type)); |
| 288 } else { | 270 } else { |
| 289 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 271 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 290 } | 272 } |
| 291 Dart_ExitScope(); | |
| 292 } | 273 } |
| 293 | 274 |
| 294 | 275 |
| 295 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { | 276 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { |
| 296 Dart_EnterScope(); | |
| 297 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 277 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 298 intptr_t num = | 278 intptr_t num = |
| 299 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); | 279 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); |
| 300 ASSERT(num == 0 || num == 1 || num == 2); | 280 ASSERT(num == 0 || num == 1 || num == 2); |
| 301 intptr_t socket = Socket::GetStdioHandle(num); | 281 intptr_t socket = Socket::GetStdioHandle(num); |
| 302 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); | 282 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); |
| 303 if (Dart_IsError(err)) Dart_PropagateError(err); | 283 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 304 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); | 284 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); |
| 305 Dart_ExitScope(); | |
| 306 } | 285 } |
| 307 | 286 |
| 308 | 287 |
| 309 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { | 288 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { |
| 310 Dart_EnterScope(); | |
| 311 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 289 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 312 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); | 290 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); |
| 313 RawAddr addr; | 291 RawAddr addr; |
| 314 Dart_Handle result = GetSockAddr(host_obj, &addr); | 292 Dart_Handle result = GetSockAddr(host_obj, &addr); |
| 315 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2); | 293 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2); |
| 316 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3); | 294 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3); |
| 317 Dart_Handle v6_only_obj = Dart_GetNativeArgument(args, 4); | 295 Dart_Handle v6_only_obj = Dart_GetNativeArgument(args, 4); |
| 318 bool v6_only = DartUtils::GetBooleanValue(v6_only_obj); | 296 bool v6_only = DartUtils::GetBooleanValue(v6_only_obj); |
| 319 int64_t port = 0; | 297 int64_t port = 0; |
| 320 int64_t backlog = 0; | 298 int64_t backlog = 0; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 336 } else { | 314 } else { |
| 337 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); | 315 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); |
| 338 } | 316 } |
| 339 } | 317 } |
| 340 } else { | 318 } else { |
| 341 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | 319 OSError os_error(-1, "Invalid argument", OSError::kUnknown); |
| 342 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | 320 Dart_Handle err = DartUtils::NewDartOSError(&os_error); |
| 343 if (Dart_IsError(err)) Dart_PropagateError(err); | 321 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 344 Dart_SetReturnValue(args, err); | 322 Dart_SetReturnValue(args, err); |
| 345 } | 323 } |
| 346 Dart_ExitScope(); | |
| 347 } | 324 } |
| 348 | 325 |
| 349 | 326 |
| 350 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { | 327 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { |
| 351 Dart_EnterScope(); | |
| 352 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 328 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 353 intptr_t socket = 0; | 329 intptr_t socket = 0; |
| 354 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 330 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 355 if (Dart_IsError(err)) Dart_PropagateError(err); | 331 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 356 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1); | 332 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1); |
| 357 intptr_t new_socket = ServerSocket::Accept(socket); | 333 intptr_t new_socket = ServerSocket::Accept(socket); |
| 358 if (new_socket >= 0) { | 334 if (new_socket >= 0) { |
| 359 Dart_Handle err = Socket::SetSocketIdNativeField(result_socket_obj, | 335 Dart_Handle err = Socket::SetSocketIdNativeField(result_socket_obj, |
| 360 new_socket); | 336 new_socket); |
| 361 if (Dart_IsError(err)) Dart_PropagateError(err); | 337 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 362 Dart_SetReturnValue(args, Dart_True()); | 338 Dart_SetReturnValue(args, Dart_True()); |
| 363 } else if (new_socket == ServerSocket::kTemporaryFailure) { | 339 } else if (new_socket == ServerSocket::kTemporaryFailure) { |
| 364 Dart_SetReturnValue(args, Dart_False()); | 340 Dart_SetReturnValue(args, Dart_False()); |
| 365 } else { | 341 } else { |
| 366 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 342 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 367 } | 343 } |
| 368 Dart_ExitScope(); | |
| 369 } | 344 } |
| 370 | 345 |
| 371 | 346 |
| 372 static CObject* LookupRequest(const CObjectArray& request) { | 347 static CObject* LookupRequest(const CObjectArray& request) { |
| 373 if (request.Length() == 3 && | 348 if (request.Length() == 3 && |
| 374 request[1]->IsString() && | 349 request[1]->IsString() && |
| 375 request[2]->IsInt32()) { | 350 request[2]->IsInt32()) { |
| 376 CObjectString host(request[1]); | 351 CObjectString host(request[1]); |
| 377 CObjectInt32 type(request[2]); | 352 CObjectInt32 type(request[2]); |
| 378 CObject* result = NULL; | 353 CObject* result = NULL; |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 true); | 514 true); |
| 540 ASSERT(result != ILLEGAL_PORT); | 515 ASSERT(result != ILLEGAL_PORT); |
| 541 service_ports_[service_ports_index_] = result; | 516 service_ports_[service_ports_index_] = result; |
| 542 } | 517 } |
| 543 service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_; | 518 service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_; |
| 544 return result; | 519 return result; |
| 545 } | 520 } |
| 546 | 521 |
| 547 | 522 |
| 548 void FUNCTION_NAME(Socket_NewServicePort)(Dart_NativeArguments args) { | 523 void FUNCTION_NAME(Socket_NewServicePort)(Dart_NativeArguments args) { |
| 549 Dart_EnterScope(); | |
| 550 Dart_SetReturnValue(args, Dart_Null()); | 524 Dart_SetReturnValue(args, Dart_Null()); |
| 551 Dart_Port service_port = Socket::GetServicePort(); | 525 Dart_Port service_port = Socket::GetServicePort(); |
| 552 if (service_port != ILLEGAL_PORT) { | 526 if (service_port != ILLEGAL_PORT) { |
| 553 // Return a send port for the service port. | 527 // Return a send port for the service port. |
| 554 Dart_Handle send_port = Dart_NewSendPort(service_port); | 528 Dart_Handle send_port = Dart_NewSendPort(service_port); |
| 555 Dart_SetReturnValue(args, send_port); | 529 Dart_SetReturnValue(args, send_port); |
| 556 } | 530 } |
| 557 Dart_ExitScope(); | |
| 558 } | 531 } |
| 559 | 532 |
| 560 | 533 |
| 561 void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) { | 534 void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) { |
| 562 Dart_EnterScope(); | |
| 563 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 535 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 564 intptr_t socket = 0; | 536 intptr_t socket = 0; |
| 565 bool result = false; | 537 bool result = false; |
| 566 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); | 538 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 567 if (Dart_IsError(err)) Dart_PropagateError(err); | 539 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 568 Dart_Handle option_obj = Dart_GetNativeArgument(args, 1); | 540 Dart_Handle option_obj = Dart_GetNativeArgument(args, 1); |
| 569 int64_t option; | 541 int64_t option; |
| 570 err = Dart_IntegerToInt64(option_obj, &option); | 542 err = Dart_IntegerToInt64(option_obj, &option); |
| 571 if (Dart_IsError(err)) Dart_PropagateError(err); | 543 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 572 Dart_Handle enabled_obj = Dart_GetNativeArgument(args, 2); | 544 Dart_Handle enabled_obj = Dart_GetNativeArgument(args, 2); |
| 573 bool enabled; | 545 bool enabled; |
| 574 err = Dart_BooleanValue(enabled_obj, &enabled); | 546 err = Dart_BooleanValue(enabled_obj, &enabled); |
| 575 if (Dart_IsError(err)) Dart_PropagateError(err); | 547 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 576 switch (option) { | 548 switch (option) { |
| 577 case 0: // TCP_NODELAY. | 549 case 0: // TCP_NODELAY. |
| 578 result = Socket::SetNoDelay(socket, enabled); | 550 result = Socket::SetNoDelay(socket, enabled); |
| 579 break; | 551 break; |
| 580 default: | 552 default: |
| 581 break; | 553 break; |
| 582 } | 554 } |
| 583 Dart_SetReturnValue(args, Dart_NewBoolean(result)); | 555 Dart_SetReturnValue(args, Dart_NewBoolean(result)); |
| 584 Dart_ExitScope(); | |
| 585 } | 556 } |
| 586 | 557 |
| 587 | 558 |
| 588 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { | 559 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { |
| 589 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); | 560 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); |
| 590 } | 561 } |
| 591 | 562 |
| 592 | 563 |
| 593 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) { | 564 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) { |
| 594 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id); | 565 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id); |
| 595 } | 566 } |
| 596 | 567 |
| 597 } // namespace bin | 568 } // namespace bin |
| 598 } // namespace dart | 569 } // namespace dart |
| OLD | NEW |