| 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 11 matching lines...) Expand all Loading... |
| 22 int Socket::service_ports_index_ = 0; | 22 int Socket::service_ports_index_ = 0; |
| 23 | 23 |
| 24 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { | 24 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { |
| 25 Dart_EnterScope(); | 25 Dart_EnterScope(); |
| 26 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 26 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 27 const char* host = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); | 27 const char* host = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); |
| 28 int64_t port = 0; | 28 int64_t port = 0; |
| 29 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) { | 29 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) { |
| 30 intptr_t socket = Socket::CreateConnect(host, port); | 30 intptr_t socket = Socket::CreateConnect(host, port); |
| 31 if (socket >= 0) { | 31 if (socket >= 0) { |
| 32 Socket::SetSocketIdNativeField(socket_obj, socket); | 32 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); |
| 33 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 33 Dart_SetReturnValue(args, Dart_True()); | 34 Dart_SetReturnValue(args, Dart_True()); |
| 34 } else { | 35 } else { |
| 35 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 36 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 36 } | 37 } |
| 37 } else { | 38 } else { |
| 38 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | 39 OSError os_error(-1, "Invalid argument", OSError::kUnknown); |
| 39 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | 40 Dart_Handle err = DartUtils::NewDartOSError(&os_error); |
| 40 if (Dart_IsError(err)) Dart_PropagateError(err); | 41 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 41 Dart_SetReturnValue(args, err); | 42 Dart_SetReturnValue(args, err); |
| 42 } | 43 } |
| 43 Dart_ExitScope(); | 44 Dart_ExitScope(); |
| 44 } | 45 } |
| 45 | 46 |
| 46 | 47 |
| 47 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { | 48 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { |
| 48 Dart_EnterScope(); | 49 Dart_EnterScope(); |
| 49 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 50 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 50 intptr_t socket = 0; | 51 intptr_t socket = 0; |
| 51 Socket::GetSocketIdNativeField(socket_obj, &socket); | 52 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 53 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 52 intptr_t available = Socket::Available(socket); | 54 intptr_t available = Socket::Available(socket); |
| 53 if (available >= 0) { | 55 if (available >= 0) { |
| 54 Dart_SetReturnValue(args, Dart_NewInteger(available)); | 56 Dart_SetReturnValue(args, Dart_NewInteger(available)); |
| 55 } else { | 57 } else { |
| 56 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 58 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 57 } | 59 } |
| 58 Dart_ExitScope(); | 60 Dart_ExitScope(); |
| 59 } | 61 } |
| 60 | 62 |
| 61 | 63 |
| 62 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { | 64 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { |
| 63 Dart_EnterScope(); | 65 Dart_EnterScope(); |
| 64 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 66 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 65 intptr_t socket = 0; | 67 intptr_t socket = 0; |
| 66 Socket::GetSocketIdNativeField(socket_obj, &socket); | 68 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 69 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 67 intptr_t available = Socket::Available(socket); | 70 intptr_t available = Socket::Available(socket); |
| 68 if (available > 0) { | 71 if (available > 0) { |
| 69 int64_t length = 0; | 72 int64_t length = 0; |
| 70 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); | 73 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); |
| 71 if (DartUtils::GetInt64Value(length_obj, &length)) { | 74 if (DartUtils::GetInt64Value(length_obj, &length)) { |
| 72 if (length == -1 || available < length) { | 75 if (length == -1 || available < length) { |
| 73 length = available; | 76 length = available; |
| 74 } | 77 } |
| 75 uint8_t* buffer = NULL; | 78 uint8_t* buffer = NULL; |
| 76 Dart_Handle result = IOBuffer::Allocate(length, &buffer); | 79 Dart_Handle result = IOBuffer::Allocate(length, &buffer); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 103 | 106 |
| 104 Dart_ExitScope(); | 107 Dart_ExitScope(); |
| 105 } | 108 } |
| 106 | 109 |
| 107 | 110 |
| 108 void FUNCTION_NAME(Socket_ReadList)(Dart_NativeArguments args) { | 111 void FUNCTION_NAME(Socket_ReadList)(Dart_NativeArguments args) { |
| 109 Dart_EnterScope(); | 112 Dart_EnterScope(); |
| 110 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); | 113 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); |
| 111 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 114 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 112 intptr_t socket = 0; | 115 intptr_t socket = 0; |
| 113 Socket::GetSocketIdNativeField(socket_obj, &socket); | 116 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 117 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 114 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); | 118 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); |
| 115 int64_t offset = 0; | 119 int64_t offset = 0; |
| 116 int64_t length = 0; | 120 int64_t length = 0; |
| 117 Dart_Handle offset_obj = Dart_GetNativeArgument(args, 2); | 121 Dart_Handle offset_obj = Dart_GetNativeArgument(args, 2); |
| 118 Dart_Handle length_obj = Dart_GetNativeArgument(args, 3); | 122 Dart_Handle length_obj = Dart_GetNativeArgument(args, 3); |
| 119 if (Dart_IsList(buffer_obj) && | 123 if (Dart_IsList(buffer_obj) && |
| 120 DartUtils::GetInt64Value(offset_obj, &offset) && | 124 DartUtils::GetInt64Value(offset_obj, &offset) && |
| 121 DartUtils::GetInt64Value(length_obj, &length)) { | 125 DartUtils::GetInt64Value(length_obj, &length)) { |
| 122 intptr_t buffer_len = 0; | 126 intptr_t buffer_len = 0; |
| 123 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); | 127 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 153 | 157 |
| 154 Dart_ExitScope(); | 158 Dart_ExitScope(); |
| 155 } | 159 } |
| 156 | 160 |
| 157 | 161 |
| 158 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { | 162 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { |
| 159 Dart_EnterScope(); | 163 Dart_EnterScope(); |
| 160 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); | 164 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); |
| 161 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 165 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 162 intptr_t socket = 0; | 166 intptr_t socket = 0; |
| 163 Socket::GetSocketIdNativeField(socket_obj, &socket); | 167 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 168 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 164 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); | 169 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); |
| 165 ASSERT(Dart_IsList(buffer_obj)); | 170 ASSERT(Dart_IsList(buffer_obj)); |
| 166 intptr_t offset = | 171 intptr_t offset = |
| 167 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); | 172 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); |
| 168 intptr_t length = | 173 intptr_t length = |
| 169 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); | 174 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
| 170 intptr_t buffer_len = 0; | 175 intptr_t buffer_len = 0; |
| 171 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); | 176 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); |
| 172 if (Dart_IsError(result)) { | 177 if (Dart_IsError(result)) { |
| 173 Dart_PropagateError(result); | 178 Dart_PropagateError(result); |
| 174 } | 179 } |
| 175 ASSERT((offset + length) <= buffer_len); | 180 ASSERT((offset + length) <= buffer_len); |
| 176 | 181 |
| 177 if (short_socket_writes) { | 182 if (short_socket_writes) { |
| 178 length = (length + 1) / 2; | 183 length = (length + 1) / 2; |
| 179 } | 184 } |
| 180 | 185 |
| 181 intptr_t total_bytes_written = 0; | 186 intptr_t total_bytes_written = 0; |
| 182 intptr_t bytes_written = 0; | 187 intptr_t bytes_written = 0; |
| 183 if (Dart_IsByteArrayExternal(buffer_obj)) { | 188 if (Dart_IsByteArrayExternal(buffer_obj)) { |
| 184 void* buffer = NULL; | 189 void* buffer = NULL; |
| 185 result = Dart_ExternalByteArrayGetData(buffer_obj, &buffer); | 190 result = Dart_ExternalByteArrayGetData(buffer_obj, &buffer); |
| 186 if (Dart_IsError(result)) { | 191 if (Dart_IsError(result)) { |
| 187 Dart_PropagateError(result); | 192 Dart_PropagateError(result); |
| 188 } | 193 } |
| 189 buffer = static_cast<void*>((static_cast<uint8_t*>(buffer) + offset)); | 194 buffer = static_cast<void*>(static_cast<uint8_t*>(buffer) + offset); |
| 190 bytes_written = Socket::Write(socket, buffer, length); | 195 bytes_written = Socket::Write(socket, buffer, length); |
| 191 if (bytes_written > 0) total_bytes_written = bytes_written; | 196 if (bytes_written > 0) total_bytes_written = bytes_written; |
| 192 } else { | 197 } else { |
| 193 // Send data in chunks of maximum 16KB. | 198 // Send data in chunks of maximum 16KB. |
| 194 const intptr_t max_chunk_length = | 199 const intptr_t max_chunk_length = |
| 195 dart::Utils::Minimum(length, static_cast<intptr_t>(16 * KB)); | 200 dart::Utils::Minimum(length, static_cast<intptr_t>(16 * KB)); |
| 196 uint8_t* buffer = new uint8_t[max_chunk_length]; | 201 uint8_t* buffer = new uint8_t[max_chunk_length]; |
| 197 do { | 202 do { |
| 198 intptr_t chunk_length = | 203 intptr_t chunk_length = |
| 199 dart::Utils::Minimum(max_chunk_length, length - total_bytes_written); | 204 dart::Utils::Minimum(max_chunk_length, length - total_bytes_written); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 217 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 222 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 218 } | 223 } |
| 219 Dart_ExitScope(); | 224 Dart_ExitScope(); |
| 220 } | 225 } |
| 221 | 226 |
| 222 | 227 |
| 223 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { | 228 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { |
| 224 Dart_EnterScope(); | 229 Dart_EnterScope(); |
| 225 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 230 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 226 intptr_t socket = 0; | 231 intptr_t socket = 0; |
| 227 Socket::GetSocketIdNativeField(socket_obj, &socket); | 232 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 233 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 228 OSError os_error; | 234 OSError os_error; |
| 229 intptr_t port = Socket::GetPort(socket); | 235 intptr_t port = Socket::GetPort(socket); |
| 230 if (port > 0) { | 236 if (port > 0) { |
| 231 Dart_SetReturnValue(args, Dart_NewInteger(port)); | 237 Dart_SetReturnValue(args, Dart_NewInteger(port)); |
| 232 } else { | 238 } else { |
| 233 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 239 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 234 } | 240 } |
| 235 Dart_ExitScope(); | 241 Dart_ExitScope(); |
| 236 } | 242 } |
| 237 | 243 |
| 238 | 244 |
| 239 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { | 245 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { |
| 240 Dart_EnterScope(); | 246 Dart_EnterScope(); |
| 241 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 247 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 242 intptr_t socket = 0; | 248 intptr_t socket = 0; |
| 243 Socket::GetSocketIdNativeField(socket_obj, &socket); | 249 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 250 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 244 OSError os_error; | 251 OSError os_error; |
| 245 intptr_t port = 0; | 252 intptr_t port = 0; |
| 246 char host[INET_ADDRSTRLEN]; | 253 char host[INET_ADDRSTRLEN]; |
| 247 if (Socket::GetRemotePeer(socket, host, &port)) { | 254 if (Socket::GetRemotePeer(socket, host, &port)) { |
| 248 Dart_Handle list = Dart_NewList(2); | 255 Dart_Handle list = Dart_NewList(2); |
| 249 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); | 256 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); |
| 250 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); | 257 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); |
| 251 Dart_SetReturnValue(args, list); | 258 Dart_SetReturnValue(args, list); |
| 252 } else { | 259 } else { |
| 253 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 260 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 254 } | 261 } |
| 255 Dart_ExitScope(); | 262 Dart_ExitScope(); |
| 256 } | 263 } |
| 257 | 264 |
| 258 | 265 |
| 259 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { | 266 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { |
| 260 Dart_EnterScope(); | 267 Dart_EnterScope(); |
| 261 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 268 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 262 intptr_t socket = 0; | 269 intptr_t socket = 0; |
| 263 Socket::GetSocketIdNativeField(socket_obj, &socket); | 270 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 271 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 264 OSError os_error; | 272 OSError os_error; |
| 265 Socket::GetError(socket, &os_error); | 273 Socket::GetError(socket, &os_error); |
| 266 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); | 274 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); |
| 267 Dart_ExitScope(); | 275 Dart_ExitScope(); |
| 268 } | 276 } |
| 269 | 277 |
| 270 | 278 |
| 271 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { | 279 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { |
| 272 Dart_EnterScope(); | 280 Dart_EnterScope(); |
| 273 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 281 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 284 } | 292 } |
| 285 | 293 |
| 286 | 294 |
| 287 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { | 295 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { |
| 288 Dart_EnterScope(); | 296 Dart_EnterScope(); |
| 289 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 297 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 290 intptr_t num = | 298 intptr_t num = |
| 291 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); | 299 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); |
| 292 ASSERT(num == 0 || num == 1 || num == 2); | 300 ASSERT(num == 0 || num == 1 || num == 2); |
| 293 intptr_t socket = Socket::GetStdioHandle(num); | 301 intptr_t socket = Socket::GetStdioHandle(num); |
| 294 Socket::SetSocketIdNativeField(socket_obj, socket); | 302 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); |
| 303 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 295 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); | 304 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); |
| 296 Dart_ExitScope(); | 305 Dart_ExitScope(); |
| 297 } | 306 } |
| 298 | 307 |
| 299 | 308 |
| 300 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { | 309 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { |
| 301 Dart_EnterScope(); | 310 Dart_EnterScope(); |
| 302 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 311 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 303 Dart_Handle bind_address_obj = Dart_GetNativeArgument(args, 1); | 312 Dart_Handle bind_address_obj = Dart_GetNativeArgument(args, 1); |
| 304 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2); | 313 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2); |
| 305 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3); | 314 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3); |
| 306 int64_t port = 0; | 315 int64_t port = 0; |
| 307 int64_t backlog = 0; | 316 int64_t backlog = 0; |
| 308 if (Dart_IsString(bind_address_obj) && | 317 if (Dart_IsString(bind_address_obj) && |
| 309 DartUtils::GetInt64Value(port_obj, &port) && | 318 DartUtils::GetInt64Value(port_obj, &port) && |
| 310 DartUtils::GetInt64Value(backlog_obj, &backlog)) { | 319 DartUtils::GetInt64Value(backlog_obj, &backlog)) { |
| 311 const char* bind_address = DartUtils::GetStringValue(bind_address_obj); | 320 const char* bind_address = DartUtils::GetStringValue(bind_address_obj); |
| 312 intptr_t socket = | 321 intptr_t socket = |
| 313 ServerSocket::CreateBindListen(bind_address, port, backlog); | 322 ServerSocket::CreateBindListen(bind_address, port, backlog); |
| 314 if (socket >= 0) { | 323 if (socket >= 0) { |
| 315 Socket::SetSocketIdNativeField(socket_obj, socket); | 324 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); |
| 325 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 316 Dart_SetReturnValue(args, Dart_True()); | 326 Dart_SetReturnValue(args, Dart_True()); |
| 317 } else { | 327 } else { |
| 318 if (socket == -5) { | 328 if (socket == -5) { |
| 319 OSError os_error(-1, "Invalid host", OSError::kUnknown); | 329 OSError os_error(-1, "Invalid host", OSError::kUnknown); |
| 320 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); | 330 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); |
| 321 } else { | 331 } else { |
| 322 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 332 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 323 } | 333 } |
| 324 } | 334 } |
| 325 } else { | 335 } else { |
| 326 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | 336 OSError os_error(-1, "Invalid argument", OSError::kUnknown); |
| 327 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | 337 Dart_Handle err = DartUtils::NewDartOSError(&os_error); |
| 328 if (Dart_IsError(err)) Dart_PropagateError(err); | 338 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 329 Dart_SetReturnValue(args, err); | 339 Dart_SetReturnValue(args, err); |
| 330 } | 340 } |
| 331 Dart_ExitScope(); | 341 Dart_ExitScope(); |
| 332 } | 342 } |
| 333 | 343 |
| 334 | 344 |
| 335 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { | 345 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { |
| 336 Dart_EnterScope(); | 346 Dart_EnterScope(); |
| 337 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); | 347 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); |
| 338 intptr_t socket = 0; | 348 intptr_t socket = 0; |
| 339 Socket::GetSocketIdNativeField(socket_obj, &socket); | 349 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); |
| 350 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 340 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1); | 351 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1); |
| 341 intptr_t new_socket = ServerSocket::Accept(socket); | 352 intptr_t new_socket = ServerSocket::Accept(socket); |
| 342 if (new_socket >= 0) { | 353 if (new_socket >= 0) { |
| 343 Socket::SetSocketIdNativeField(result_socket_obj, new_socket); | 354 Dart_Handle err = Socket::SetSocketIdNativeField(result_socket_obj, |
| 355 new_socket); |
| 356 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 344 Dart_SetReturnValue(args, Dart_True()); | 357 Dart_SetReturnValue(args, Dart_True()); |
| 345 } else if (new_socket == ServerSocket::kTemporaryFailure) { | 358 } else if (new_socket == ServerSocket::kTemporaryFailure) { |
| 346 Dart_SetReturnValue(args, Dart_False()); | 359 Dart_SetReturnValue(args, Dart_False()); |
| 347 } else { | 360 } else { |
| 348 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 361 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 349 } | 362 } |
| 350 Dart_ExitScope(); | 363 Dart_ExitScope(); |
| 351 } | 364 } |
| 352 | 365 |
| 353 | 366 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 367 } | 380 } |
| 368 return result; | 381 return result; |
| 369 } | 382 } |
| 370 return CObject::IllegalArgumentError(); | 383 return CObject::IllegalArgumentError(); |
| 371 } | 384 } |
| 372 | 385 |
| 373 | 386 |
| 374 void SocketService(Dart_Port dest_port_id, | 387 void SocketService(Dart_Port dest_port_id, |
| 375 Dart_Port reply_port_id, | 388 Dart_Port reply_port_id, |
| 376 Dart_CObject* message) { | 389 Dart_CObject* message) { |
| 377 CObject* response = CObject::False(); | 390 CObject* response = CObject::IllegalArgumentError(); |
| 378 CObjectArray request(message); | 391 CObjectArray request(message); |
| 379 if (message->type == Dart_CObject::kArray) { | 392 if (message->type == Dart_CObject::kArray) { |
| 380 if (request.Length() > 1 && request[0]->IsInt32()) { | 393 if (request.Length() > 1 && request[0]->IsInt32()) { |
| 381 CObjectInt32 request_type(request[0]); | 394 CObjectInt32 request_type(request[0]); |
| 382 switch (request_type.Value()) { | 395 switch (request_type.Value()) { |
| 383 case Socket::kLookupRequest: | 396 case Socket::kLookupRequest: |
| 384 response = LookupRequest(request); | 397 response = LookupRequest(request); |
| 385 break; | 398 break; |
| 386 default: | 399 default: |
| 387 UNREACHABLE(); | 400 UNREACHABLE(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 445 |
| 433 | 446 |
| 434 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { | 447 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { |
| 435 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); | 448 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); |
| 436 } | 449 } |
| 437 | 450 |
| 438 | 451 |
| 439 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) { | 452 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) { |
| 440 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id); | 453 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id); |
| 441 } | 454 } |
| OLD | NEW |