Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: runtime/bin/socket.cc

Issue 1800863002: Cleanup in //runtime/bin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/bin/socket.h ('k') | runtime/bin/socket_android.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/dartutils.h"
5 #include "bin/io_buffer.h" 6 #include "bin/io_buffer.h"
6 #include "bin/isolate_data.h" 7 #include "bin/isolate_data.h"
7 #include "bin/dartutils.h" 8 #include "bin/lockers.h"
8 #include "bin/socket.h" 9 #include "bin/socket.h"
9 #include "bin/thread.h" 10 #include "bin/thread.h"
10 #include "bin/lockers.h"
11 #include "bin/utils.h" 11 #include "bin/utils.h"
12 12
13 #include "platform/globals.h" 13 #include "platform/globals.h"
14 #include "platform/utils.h" 14 #include "platform/utils.h"
15 15
16 #include "include/dart_api.h" 16 #include "include/dart_api.h"
17 17
18 namespace dart { 18 namespace dart {
19 namespace bin { 19 namespace bin {
20 20
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 SocketsIterator it = sockets_by_port_.find(port); 53 SocketsIterator it = sockets_by_port_.find(port);
54 OSSocket *first_os_socket = NULL; 54 OSSocket *first_os_socket = NULL;
55 if (it != sockets_by_port_.end()) { 55 if (it != sockets_by_port_.end()) {
56 first_os_socket = it->second; 56 first_os_socket = it->second;
57 } 57 }
58 58
59 if (first_os_socket != NULL) { 59 if (first_os_socket != NULL) {
60 // There is already a socket listening on this port. We need to ensure 60 // There is already a socket listening on this port. We need to ensure
61 // that if there is one also listening on the same address, it was created 61 // that if there is one also listening on the same address, it was created
62 // with `shared = true`, ... 62 // with `shared = true`, ...
63
64 OSSocket *os_socket = it->second; 63 OSSocket *os_socket = it->second;
65 OSSocket *os_socket_same_addr = findOSSocketWithAddress(os_socket, addr); 64 OSSocket *os_socket_same_addr = findOSSocketWithAddress(os_socket, addr);
66 65
67 if (os_socket_same_addr != NULL) { 66 if (os_socket_same_addr != NULL) {
68 if (!os_socket_same_addr->shared || !shared) { 67 if (!os_socket_same_addr->shared || !shared) {
69 OSError os_error(-1, 68 OSError os_error(-1,
70 "The shared flag to bind() needs to be `true` if " 69 "The shared flag to bind() needs to be `true` if "
71 "binding multiple times on the same (address, port) " 70 "binding multiple times on the same (address, port) "
72 "combination.", 71 "combination.",
73 OSError::kUnknown); 72 OSError::kUnknown);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 sockets_by_fd_.erase(socketfd); 138 sockets_by_fd_.erase(socketfd);
140 139
141 OSSocket *prev = NULL; 140 OSSocket *prev = NULL;
142 OSSocket *current = sockets_by_port_[os_socket->port]; 141 OSSocket *current = sockets_by_port_[os_socket->port];
143 while (current != os_socket) { 142 while (current != os_socket) {
144 ASSERT(current != NULL); 143 ASSERT(current != NULL);
145 prev = current; 144 prev = current;
146 current = current->next; 145 current = current->next;
147 } 146 }
148 147
149 if (prev == NULL && current->next == NULL) { 148 if ((prev == NULL) && (current->next == NULL)) {
150 // Remove last element from the list. 149 // Remove last element from the list.
151 sockets_by_port_.erase(os_socket->port); 150 sockets_by_port_.erase(os_socket->port);
152 } else if (prev == NULL) { 151 } else if (prev == NULL) {
153 // Remove first element of the list. 152 // Remove first element of the list.
154 sockets_by_port_[os_socket->port] = current->next; 153 sockets_by_port_[os_socket->port] = current->next;
155 } else { 154 } else {
156 // Remove element from the list which is not the first one. 155 // Remove element from the list which is not the first one.
157 prev->next = os_socket->next; 156 prev->next = os_socket->next;
158 } 157 }
159 158
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); 263 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read");
265 intptr_t socket = 264 intptr_t socket =
266 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 265 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
267 int64_t length = 0; 266 int64_t length = 0;
268 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &length)) { 267 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &length)) {
269 if (short_socket_reads) { 268 if (short_socket_reads) {
270 length = (length + 1) / 2; 269 length = (length + 1) / 2;
271 } 270 }
272 uint8_t* buffer = NULL; 271 uint8_t* buffer = NULL;
273 Dart_Handle result = IOBuffer::Allocate(length, &buffer); 272 Dart_Handle result = IOBuffer::Allocate(length, &buffer);
274 if (Dart_IsError(result)) Dart_PropagateError(result); 273 if (Dart_IsError(result)) {
274 Dart_PropagateError(result);
275 }
275 ASSERT(buffer != NULL); 276 ASSERT(buffer != NULL);
276 intptr_t bytes_read = Socket::Read(socket, buffer, length); 277 intptr_t bytes_read = Socket::Read(socket, buffer, length);
277 if (bytes_read == length) { 278 if (bytes_read == length) {
278 Dart_SetReturnValue(args, result); 279 Dart_SetReturnValue(args, result);
279 } else if (bytes_read > 0) { 280 } else if (bytes_read > 0) {
280 uint8_t* new_buffer = NULL; 281 uint8_t* new_buffer = NULL;
281 Dart_Handle new_result = IOBuffer::Allocate(bytes_read, &new_buffer); 282 Dart_Handle new_result = IOBuffer::Allocate(bytes_read, &new_buffer);
282 if (Dart_IsError(new_result)) Dart_PropagateError(new_result); 283 if (Dart_IsError(new_result)) {
284 Dart_PropagateError(new_result);
285 }
283 ASSERT(new_buffer != NULL); 286 ASSERT(new_buffer != NULL);
284 memmove(new_buffer, buffer, bytes_read); 287 memmove(new_buffer, buffer, bytes_read);
285 Dart_SetReturnValue(args, new_result); 288 Dart_SetReturnValue(args, new_result);
286 } else if (bytes_read == 0) { 289 } else if (bytes_read == 0) {
287 // On MacOS when reading from a tty Ctrl-D will result in reading one 290 // On MacOS when reading from a tty Ctrl-D will result in reading one
288 // less byte then reported as available. 291 // less byte then reported as available.
289 Dart_SetReturnValue(args, Dart_Null()); 292 Dart_SetReturnValue(args, Dart_Null());
290 } else { 293 } else {
291 ASSERT(bytes_read == -1); 294 ASSERT(bytes_read == -1);
292 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 295 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
(...skipping 26 matching lines...) Expand all
319 } 322 }
320 if (bytes_read < 0) { 323 if (bytes_read < 0) {
321 ASSERT(bytes_read == -1); 324 ASSERT(bytes_read == -1);
322 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 325 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
323 return; 326 return;
324 } 327 }
325 // Datagram data read. Copy into buffer of the exact size, 328 // Datagram data read. Copy into buffer of the exact size,
326 ASSERT(bytes_read > 0); 329 ASSERT(bytes_read > 0);
327 uint8_t* data_buffer = NULL; 330 uint8_t* data_buffer = NULL;
328 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer); 331 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer);
329 if (Dart_IsError(data)) Dart_PropagateError(data); 332 if (Dart_IsError(data)) {
333 Dart_PropagateError(data);
334 }
330 ASSERT(data_buffer != NULL); 335 ASSERT(data_buffer != NULL);
331 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read); 336 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read);
332 337
333 // Get the port and clear it in the sockaddr structure. 338 // Get the port and clear it in the sockaddr structure.
334 int port = SocketAddress::GetAddrPort(addr); 339 int port = SocketAddress::GetAddrPort(addr);
335 if (addr.addr.sa_family == AF_INET) { 340 if (addr.addr.sa_family == AF_INET) {
336 addr.in.sin_port = 0; 341 addr.in.sin_port = 0;
337 } else { 342 } else {
338 ASSERT(addr.addr.sa_family == AF_INET6); 343 ASSERT(addr.addr.sa_family == AF_INET6);
339 addr.in6.sin6_port = 0; 344 addr.in6.sin6_port = 0;
340 } 345 }
341 // Format the address to a string using the numeric format. 346 // Format the address to a string using the numeric format.
342 char numeric_address[INET6_ADDRSTRLEN]; 347 char numeric_address[INET6_ADDRSTRLEN];
343 Socket::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN); 348 Socket::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN);
344 349
345 // Create a Datagram object with the data and sender address and port. 350 // Create a Datagram object with the data and sender address and port.
346 const int kNumArgs = 4; 351 const int kNumArgs = 4;
347 Dart_Handle dart_args[kNumArgs]; 352 Dart_Handle dart_args[kNumArgs];
348 dart_args[0] = data; 353 dart_args[0] = data;
349 dart_args[1] = Dart_NewStringFromCString(numeric_address); 354 dart_args[1] = Dart_NewStringFromCString(numeric_address);
350 if (Dart_IsError(dart_args[1])) Dart_PropagateError(dart_args[1]); 355 if (Dart_IsError(dart_args[1])) {
356 Dart_PropagateError(dart_args[1]);
357 }
351 dart_args[2] = SocketAddress::ToTypedData(addr); 358 dart_args[2] = SocketAddress::ToTypedData(addr);
352 dart_args[3] = Dart_NewInteger(port); 359 dart_args[3] = Dart_NewInteger(port);
353 if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]); 360 if (Dart_IsError(dart_args[3])) {
361 Dart_PropagateError(dart_args[3]);
362 }
354 // TODO(sgjesse): Cache the _makeDatagram function somewhere. 363 // TODO(sgjesse): Cache the _makeDatagram function somewhere.
355 Dart_Handle io_lib = 364 Dart_Handle io_lib =
356 Dart_LookupLibrary(DartUtils::NewString("dart:io")); 365 Dart_LookupLibrary(DartUtils::NewString("dart:io"));
357 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); 366 if (Dart_IsError(io_lib)) {
367 Dart_PropagateError(io_lib);
368 }
358 Dart_Handle result = 369 Dart_Handle result =
359 Dart_Invoke(io_lib, 370 Dart_Invoke(io_lib,
360 DartUtils::NewString("_makeDatagram"), 371 DartUtils::NewString("_makeDatagram"),
361 kNumArgs, 372 kNumArgs,
362 dart_args); 373 dart_args);
363 Dart_SetReturnValue(args, result); 374 Dart_SetReturnValue(args, result);
364 } 375 }
365 376
366 377
367 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { 378 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) {
368 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); 379 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write");
369 intptr_t socket = 380 intptr_t socket =
370 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 381 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
371 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 382 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
372 ASSERT(Dart_IsList(buffer_obj)); 383 ASSERT(Dart_IsList(buffer_obj));
373 intptr_t offset = 384 intptr_t offset =
374 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 2)); 385 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 2));
375 intptr_t length = 386 intptr_t length =
376 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 3)); 387 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 3));
377 bool short_write = false; 388 bool short_write = false;
378 if (short_socket_writes) { 389 if (short_socket_writes) {
379 if (length > 1) short_write = true; 390 if (length > 1) {
391 short_write = true;
392 }
380 length = (length + 1) / 2; 393 length = (length + 1) / 2;
381 } 394 }
382 Dart_TypedData_Type type; 395 Dart_TypedData_Type type;
383 uint8_t* buffer = NULL; 396 uint8_t* buffer = NULL;
384 intptr_t len; 397 intptr_t len;
385 Dart_Handle result = Dart_TypedDataAcquireData( 398 Dart_Handle result = Dart_TypedDataAcquireData(
386 buffer_obj, &type, reinterpret_cast<void**>(&buffer), &len); 399 buffer_obj, &type, reinterpret_cast<void**>(&buffer), &len);
387 if (Dart_IsError(result)) Dart_PropagateError(result); 400 if (Dart_IsError(result)) {
401 Dart_PropagateError(result);
402 }
388 ASSERT((offset + length) <= len); 403 ASSERT((offset + length) <= len);
389 buffer += offset; 404 buffer += offset;
390 intptr_t bytes_written = Socket::Write(socket, buffer, length); 405 intptr_t bytes_written = Socket::Write(socket, buffer, length);
391 if (bytes_written >= 0) { 406 if (bytes_written >= 0) {
392 Dart_TypedDataReleaseData(buffer_obj); 407 Dart_TypedDataReleaseData(buffer_obj);
393 if (short_write) { 408 if (short_write) {
394 // If the write was forced 'short', indicate by returning the negative 409 // If the write was forced 'short', indicate by returning the negative
395 // number of bytes. A forced short write may not trigger a write event. 410 // number of bytes. A forced short write may not trigger a write event.
396 Dart_SetReturnValue(args, Dart_NewInteger(-bytes_written)); 411 Dart_SetReturnValue(args, Dart_NewInteger(-bytes_written));
397 } else { 412 } else {
(...skipping 23 matching lines...) Expand all
421 int64_t port = DartUtils::GetInt64ValueCheckRange( 436 int64_t port = DartUtils::GetInt64ValueCheckRange(
422 Dart_GetNativeArgument(args, 5), 437 Dart_GetNativeArgument(args, 5),
423 0, 438 0,
424 65535); 439 65535);
425 SocketAddress::SetAddrPort(&addr, port); 440 SocketAddress::SetAddrPort(&addr, port);
426 Dart_TypedData_Type type; 441 Dart_TypedData_Type type;
427 uint8_t* buffer = NULL; 442 uint8_t* buffer = NULL;
428 intptr_t len; 443 intptr_t len;
429 Dart_Handle result = Dart_TypedDataAcquireData( 444 Dart_Handle result = Dart_TypedDataAcquireData(
430 buffer_obj, &type, reinterpret_cast<void**>(&buffer), &len); 445 buffer_obj, &type, reinterpret_cast<void**>(&buffer), &len);
431 if (Dart_IsError(result)) Dart_PropagateError(result); 446 if (Dart_IsError(result)) {
447 Dart_PropagateError(result);
448 }
432 ASSERT((offset + length) <= len); 449 ASSERT((offset + length) <= len);
433 buffer += offset; 450 buffer += offset;
434 intptr_t bytes_written = Socket::SendTo(socket, buffer, length, addr); 451 intptr_t bytes_written = Socket::SendTo(socket, buffer, length, addr);
435 if (bytes_written >= 0) { 452 if (bytes_written >= 0) {
436 Dart_TypedDataReleaseData(buffer_obj); 453 Dart_TypedDataReleaseData(buffer_obj);
437 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); 454 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written));
438 } else { 455 } else {
439 // Extract OSError before we release data, as it may override the error. 456 // Extract OSError before we release data, as it may override the error.
440 OSError os_error; 457 OSError os_error;
441 Dart_TypedDataReleaseData(buffer_obj); 458 Dart_TypedDataReleaseData(buffer_obj);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { 528 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) {
512 int64_t num = DartUtils::GetInt64ValueCheckRange( 529 int64_t num = DartUtils::GetInt64ValueCheckRange(
513 Dart_GetNativeArgument(args, 1), 0, 2); 530 Dart_GetNativeArgument(args, 1), 0, 2);
514 intptr_t socket = Socket::GetStdioHandle(num); 531 intptr_t socket = Socket::GetStdioHandle(num);
515 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); 532 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
516 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); 533 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0));
517 } 534 }
518 535
519 536
520 void FUNCTION_NAME(Socket_GetSocketId)(Dart_NativeArguments args) { 537 void FUNCTION_NAME(Socket_GetSocketId)(Dart_NativeArguments args) {
521 intptr_t id = 538 intptr_t id = Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
522 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
523 Dart_SetReturnValue(args, Dart_NewInteger(id)); 539 Dart_SetReturnValue(args, Dart_NewInteger(id));
524 } 540 }
525 541
526 542
527 void FUNCTION_NAME(Socket_SetSocketId)(Dart_NativeArguments args) { 543 void FUNCTION_NAME(Socket_SetSocketId)(Dart_NativeArguments args) {
528 intptr_t id = 544 intptr_t id = DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
529 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
530 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), id); 545 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), id);
531 } 546 }
532 547
533 548
534 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { 549 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) {
535 RawAddr addr; 550 RawAddr addr;
536 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 551 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
537 int64_t port = DartUtils::GetInt64ValueCheckRange( 552 int64_t port = DartUtils::GetInt64ValueCheckRange(
538 Dart_GetNativeArgument(args, 2), 553 Dart_GetNativeArgument(args, 2),
539 0, 554 0,
(...skipping 22 matching lines...) Expand all
562 Dart_SetReturnValue(args, Dart_True()); 577 Dart_SetReturnValue(args, Dart_True());
563 } else if (new_socket == ServerSocket::kTemporaryFailure) { 578 } else if (new_socket == ServerSocket::kTemporaryFailure) {
564 Dart_SetReturnValue(args, Dart_False()); 579 Dart_SetReturnValue(args, Dart_False());
565 } else { 580 } else {
566 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 581 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
567 } 582 }
568 } 583 }
569 584
570 585
571 CObject* Socket::LookupRequest(const CObjectArray& request) { 586 CObject* Socket::LookupRequest(const CObjectArray& request) {
572 if (request.Length() == 2 && 587 if ((request.Length() == 2) &&
573 request[0]->IsString() && 588 request[0]->IsString() &&
574 request[1]->IsInt32()) { 589 request[1]->IsInt32()) {
575 CObjectString host(request[0]); 590 CObjectString host(request[0]);
576 CObjectInt32 type(request[1]); 591 CObjectInt32 type(request[1]);
577 CObject* result = NULL; 592 CObject* result = NULL;
578 OSError* os_error = NULL; 593 OSError* os_error = NULL;
579 AddressList<SocketAddress>* addresses = 594 AddressList<SocketAddress>* addresses =
580 Socket::LookupAddress(host.CString(), type.Value(), &os_error); 595 Socket::LookupAddress(host.CString(), type.Value(), &os_error);
581 if (addresses != NULL) { 596 if (addresses != NULL) {
582 CObjectArray* array = new CObjectArray( 597 CObjectArray* array = new CObjectArray(
(...skipping 23 matching lines...) Expand all
606 result = CObject::NewOSError(os_error); 621 result = CObject::NewOSError(os_error);
607 delete os_error; 622 delete os_error;
608 } 623 }
609 return result; 624 return result;
610 } 625 }
611 return CObject::IllegalArgumentError(); 626 return CObject::IllegalArgumentError();
612 } 627 }
613 628
614 629
615 CObject* Socket::ReverseLookupRequest(const CObjectArray& request) { 630 CObject* Socket::ReverseLookupRequest(const CObjectArray& request) {
616 if (request.Length() == 1 && 631 if ((request.Length() == 1) &&
617 request[0]->IsTypedData()) { 632 request[0]->IsTypedData()) {
618 CObjectUint8Array addr_object(request[0]); 633 CObjectUint8Array addr_object(request[0]);
619 RawAddr addr; 634 RawAddr addr;
620 int len = addr_object.Length(); 635 int len = addr_object.Length();
621 memset(reinterpret_cast<void*>(&addr), 0, sizeof(RawAddr)); 636 memset(reinterpret_cast<void*>(&addr), 0, sizeof(RawAddr));
622 if (len == sizeof(in_addr)) { 637 if (len == sizeof(in_addr)) {
623 addr.in.sin_family = AF_INET; 638 addr.in.sin_family = AF_INET;
624 memmove(reinterpret_cast<void*>(&addr.in.sin_addr), 639 memmove(reinterpret_cast<void*>(&addr.in.sin_addr),
625 addr_object.Buffer(), 640 addr_object.Buffer(),
626 len); 641 len);
(...skipping 14 matching lines...) Expand all
641 CObject* result = CObject::NewOSError(os_error); 656 CObject* result = CObject::NewOSError(os_error);
642 delete os_error; 657 delete os_error;
643 return result; 658 return result;
644 } 659 }
645 } 660 }
646 return CObject::IllegalArgumentError(); 661 return CObject::IllegalArgumentError();
647 } 662 }
648 663
649 664
650 CObject* Socket::ListInterfacesRequest(const CObjectArray& request) { 665 CObject* Socket::ListInterfacesRequest(const CObjectArray& request) {
651 if (request.Length() == 1 && 666 if ((request.Length() == 1) &&
652 request[0]->IsInt32()) { 667 request[0]->IsInt32()) {
653 CObjectInt32 type(request[0]); 668 CObjectInt32 type(request[0]);
654 CObject* result = NULL; 669 CObject* result = NULL;
655 OSError* os_error = NULL; 670 OSError* os_error = NULL;
656 AddressList<InterfaceSocketAddress>* addresses = Socket::ListInterfaces( 671 AddressList<InterfaceSocketAddress>* addresses = Socket::ListInterfaces(
657 type.Value(), &os_error); 672 type.Value(), &os_error);
658 if (addresses != NULL) { 673 if (addresses != NULL) {
659 CObjectArray* array = new CObjectArray( 674 CObjectArray* array = new CObjectArray(
660 CObject::NewArray(addresses->count() + 1)); 675 CObject::NewArray(addresses->count() + 1));
661 array->SetAt(0, new CObjectInt32(CObject::NewInt32(0))); 676 array->SetAt(0, new CObjectInt32(CObject::NewInt32(0)));
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 Dart_SetReturnValue(args, Dart_Null()); 849 Dart_SetReturnValue(args, Dart_Null());
835 } else { 850 } else {
836 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 851 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
837 } 852 }
838 } 853 }
839 854
840 855
841 void Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { 856 void Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) {
842 Dart_Handle err = 857 Dart_Handle err =
843 Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); 858 Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id);
844 if (Dart_IsError(err)) Dart_PropagateError(err); 859 if (Dart_IsError(err)) {
860 Dart_PropagateError(err);
861 }
845 } 862 }
846 863
847 864
848 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) { 865 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) {
849 intptr_t socket = 0; 866 intptr_t socket = 0;
850 Dart_Handle err = 867 Dart_Handle err =
851 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket); 868 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket);
852 if (Dart_IsError(err)) Dart_PropagateError(err); 869 if (Dart_IsError(err)) {
870 Dart_PropagateError(err);
871 }
853 return socket; 872 return socket;
854 } 873 }
855 874
856 } // namespace bin 875 } // namespace bin
857 } // namespace dart 876 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/socket.h ('k') | runtime/bin/socket_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698