| 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/isolate_data.h" | 6 #include "bin/isolate_data.h" |
| 7 #include "bin/dartutils.h" | 7 #include "bin/dartutils.h" |
| 8 #include "bin/socket.h" | 8 #include "bin/socket.h" |
| 9 #include "bin/thread.h" | 9 #include "bin/thread.h" |
| 10 #include "bin/lockers.h" | 10 #include "bin/lockers.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 | 36 |
| 37 | 37 |
| 38 void ListeningSocketRegistry::Cleanup() { | 38 void ListeningSocketRegistry::Cleanup() { |
| 39 delete globalTcpListeningSocketRegistry; | 39 delete globalTcpListeningSocketRegistry; |
| 40 globalTcpListeningSocketRegistry = NULL; | 40 globalTcpListeningSocketRegistry = NULL; |
| 41 } | 41 } |
| 42 | 42 |
| 43 | 43 |
| 44 Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object, | 44 Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object, |
| 45 RawAddr addr, | 45 RawAddr addr, |
| 46 intptr_t port, | |
| 47 intptr_t backlog, | 46 intptr_t backlog, |
| 48 bool v6_only, | 47 bool v6_only, |
| 49 bool shared) { | 48 bool shared) { |
| 50 MutexLocker ml(ListeningSocketRegistry::mutex_); | 49 MutexLocker ml(ListeningSocketRegistry::mutex_); |
| 51 | 50 |
| 51 intptr_t port = SocketAddress::GetAddrPort(addr); |
| 52 |
| 52 SocketsIterator it = sockets_by_port_.find(port); | 53 SocketsIterator it = sockets_by_port_.find(port); |
| 53 OSSocket *first_os_socket = NULL; | 54 OSSocket *first_os_socket = NULL; |
| 54 if (it != sockets_by_port_.end()) { | 55 if (it != sockets_by_port_.end()) { |
| 55 first_os_socket = it->second; | 56 first_os_socket = it->second; |
| 56 } | 57 } |
| 57 | 58 |
| 58 if (first_os_socket != NULL) { | 59 if (first_os_socket != NULL) { |
| 59 // 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 |
| 60 // 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 |
| 61 // with `shared = true`, ... | 62 // with `shared = true`, ... |
| (...skipping 25 matching lines...) Expand all Loading... |
| 87 os_socket->ref_count++; | 88 os_socket->ref_count++; |
| 88 | 89 |
| 89 // We set as a side-effect the file descriptor on the dart socket_object. | 90 // We set as a side-effect the file descriptor on the dart socket_object. |
| 90 Socket::SetSocketIdNativeField(socket_object, os_socket->socketfd); | 91 Socket::SetSocketIdNativeField(socket_object, os_socket->socketfd); |
| 91 | 92 |
| 92 return Dart_True(); | 93 return Dart_True(); |
| 93 } | 94 } |
| 94 } | 95 } |
| 95 | 96 |
| 96 // There is no socket listening on that (address, port), so we create new one. | 97 // There is no socket listening on that (address, port), so we create new one. |
| 97 intptr_t socketfd = ServerSocket::CreateBindListen( | 98 intptr_t socketfd = ServerSocket::CreateBindListen(addr, backlog, v6_only); |
| 98 addr, port, backlog, v6_only); | |
| 99 if (socketfd == -5) { | 99 if (socketfd == -5) { |
| 100 OSError os_error(-1, "Invalid host", OSError::kUnknown); | 100 OSError os_error(-1, "Invalid host", OSError::kUnknown); |
| 101 return DartUtils::NewDartOSError(&os_error); | 101 return DartUtils::NewDartOSError(&os_error); |
| 102 } | 102 } |
| 103 if (socketfd < 0) { | 103 if (socketfd < 0) { |
| 104 OSError error; | 104 OSError error; |
| 105 return DartUtils::NewDartOSError(&error); | 105 return DartUtils::NewDartOSError(&error); |
| 106 } | 106 } |
| 107 if (!ServerSocket::StartAccept(socketfd)) { | 107 if (!ServerSocket::StartAccept(socketfd)) { |
| 108 OSError os_error(-1, "Failed to start accept", OSError::kUnknown); | 108 OSError os_error(-1, "Failed to start accept", OSError::kUnknown); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 : SocketAddress::TYPE_IPV6; | 194 : SocketAddress::TYPE_IPV6; |
| 195 if (type == SocketAddress::TYPE_IPV4) { | 195 if (type == SocketAddress::TYPE_IPV4) { |
| 196 raw.addr.sa_family = AF_INET; | 196 raw.addr.sa_family = AF_INET; |
| 197 } else { | 197 } else { |
| 198 raw.addr.sa_family = AF_INET6; | 198 raw.addr.sa_family = AF_INET6; |
| 199 } | 199 } |
| 200 bool ok = Socket::ParseAddress(type, address, &raw); | 200 bool ok = Socket::ParseAddress(type, address, &raw); |
| 201 if (!ok) { | 201 if (!ok) { |
| 202 Dart_SetReturnValue(args, Dart_Null()); | 202 Dart_SetReturnValue(args, Dart_Null()); |
| 203 } else { | 203 } else { |
| 204 Dart_SetReturnValue(args, SocketAddress::ToTypedData(&raw)); | 204 Dart_SetReturnValue(args, SocketAddress::ToTypedData(raw)); |
| 205 } | 205 } |
| 206 } | 206 } |
| 207 | 207 |
| 208 | 208 |
| 209 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { | 209 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { |
| 210 RawAddr addr; | 210 RawAddr addr; |
| 211 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 211 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 212 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); | 212 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); |
| 213 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); | 213 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); |
| 214 intptr_t socket = Socket::CreateConnect(addr, static_cast<intptr_t>(port)); | 214 SocketAddress::SetAddrPort(&addr, static_cast<intptr_t>(port)); |
| 215 intptr_t socket = Socket::CreateConnect(addr); |
| 215 OSError error; | 216 OSError error; |
| 216 if (socket >= 0) { | 217 if (socket >= 0) { |
| 217 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); | 218 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); |
| 218 Dart_SetReturnValue(args, Dart_True()); | 219 Dart_SetReturnValue(args, Dart_True()); |
| 219 } else { | 220 } else { |
| 220 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); | 221 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); |
| 221 } | 222 } |
| 222 } | 223 } |
| 223 | 224 |
| 224 | 225 |
| 225 void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) { | 226 void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) { |
| 226 RawAddr addr; | 227 RawAddr addr; |
| 227 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 228 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 228 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); | 229 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); |
| 229 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); | 230 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); |
| 231 SocketAddress::SetAddrPort(&addr, static_cast<intptr_t>(port)); |
| 230 RawAddr sourceAddr; | 232 RawAddr sourceAddr; |
| 231 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 3), &sourceAddr); | 233 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 3), &sourceAddr); |
| 232 intptr_t socket = Socket::CreateBindConnect( | 234 intptr_t socket = Socket::CreateBindConnect(addr, sourceAddr); |
| 233 addr, static_cast<intptr_t>(port), sourceAddr); | |
| 234 OSError error; | 235 OSError error; |
| 235 if (socket >= 0) { | 236 if (socket >= 0) { |
| 236 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); | 237 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); |
| 237 Dart_SetReturnValue(args, Dart_True()); | 238 Dart_SetReturnValue(args, Dart_True()); |
| 238 } else { | 239 } else { |
| 239 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); | 240 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); |
| 240 } | 241 } |
| 241 } | 242 } |
| 242 | 243 |
| 243 | 244 |
| 244 void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) { | 245 void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) { |
| 245 RawAddr addr; | 246 RawAddr addr; |
| 246 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 247 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 247 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); | 248 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); |
| 248 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); | 249 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); |
| 250 SocketAddress::SetAddrPort(&addr, port); |
| 249 bool reuse_addr = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)); | 251 bool reuse_addr = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)); |
| 250 intptr_t socket = Socket::CreateBindDatagram(&addr, | 252 intptr_t socket = Socket::CreateBindDatagram(addr, reuse_addr); |
| 251 static_cast<intptr_t>(port), | |
| 252 reuse_addr); | |
| 253 if (socket >= 0) { | 253 if (socket >= 0) { |
| 254 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); | 254 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); |
| 255 Dart_SetReturnValue(args, Dart_True()); | 255 Dart_SetReturnValue(args, Dart_True()); |
| 256 } else { | 256 } else { |
| 257 OSError error; | 257 OSError error; |
| 258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); | 258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); |
| 259 } | 259 } |
| 260 } | 260 } |
| 261 | 261 |
| 262 | 262 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 } | 340 } |
| 341 // Datagram data read. Copy into buffer of the exact size, | 341 // Datagram data read. Copy into buffer of the exact size, |
| 342 ASSERT(bytes_read > 0); | 342 ASSERT(bytes_read > 0); |
| 343 uint8_t* data_buffer = NULL; | 343 uint8_t* data_buffer = NULL; |
| 344 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer); | 344 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer); |
| 345 if (Dart_IsError(data)) Dart_PropagateError(data); | 345 if (Dart_IsError(data)) Dart_PropagateError(data); |
| 346 ASSERT(data_buffer != NULL); | 346 ASSERT(data_buffer != NULL); |
| 347 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read); | 347 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read); |
| 348 | 348 |
| 349 // Get the port and clear it in the sockaddr structure. | 349 // Get the port and clear it in the sockaddr structure. |
| 350 int port = SocketAddress::GetAddrPort(&addr); | 350 int port = SocketAddress::GetAddrPort(addr); |
| 351 if (addr.addr.sa_family == AF_INET) { | 351 if (addr.addr.sa_family == AF_INET) { |
| 352 addr.in.sin_port = 0; | 352 addr.in.sin_port = 0; |
| 353 } else { | 353 } else { |
| 354 ASSERT(addr.addr.sa_family == AF_INET6); | 354 ASSERT(addr.addr.sa_family == AF_INET6); |
| 355 addr.in6.sin6_port = 0; | 355 addr.in6.sin6_port = 0; |
| 356 } | 356 } |
| 357 // Format the address to a string using the numeric format. | 357 // Format the address to a string using the numeric format. |
| 358 char numeric_address[INET6_ADDRSTRLEN]; | 358 char numeric_address[INET6_ADDRSTRLEN]; |
| 359 Socket::FormatNumericAddress(&addr, numeric_address, INET6_ADDRSTRLEN); | 359 Socket::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN); |
| 360 | 360 |
| 361 // Create a Datagram object with the data and sender address and port. | 361 // Create a Datagram object with the data and sender address and port. |
| 362 const int kNumArgs = 4; | 362 const int kNumArgs = 4; |
| 363 Dart_Handle dart_args[kNumArgs]; | 363 Dart_Handle dart_args[kNumArgs]; |
| 364 dart_args[0] = data; | 364 dart_args[0] = data; |
| 365 dart_args[1] = Dart_NewStringFromCString(numeric_address); | 365 dart_args[1] = Dart_NewStringFromCString(numeric_address); |
| 366 if (Dart_IsError(dart_args[1])) Dart_PropagateError(dart_args[1]); | 366 if (Dart_IsError(dart_args[1])) Dart_PropagateError(dart_args[1]); |
| 367 dart_args[2] = SocketAddress::ToTypedData(&addr); | 367 dart_args[2] = SocketAddress::ToTypedData(addr); |
| 368 dart_args[3] = Dart_NewInteger(port); | 368 dart_args[3] = Dart_NewInteger(port); |
| 369 if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]); | 369 if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]); |
| 370 // TODO(sgjesse): Cache the _makeDatagram function somewhere. | 370 // TODO(sgjesse): Cache the _makeDatagram function somewhere. |
| 371 Dart_Handle io_lib = | 371 Dart_Handle io_lib = |
| 372 Dart_LookupLibrary(DartUtils::NewString("dart:io")); | 372 Dart_LookupLibrary(DartUtils::NewString("dart:io")); |
| 373 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); | 373 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); |
| 374 Dart_Handle result = | 374 Dart_Handle result = |
| 375 Dart_Invoke(io_lib, | 375 Dart_Invoke(io_lib, |
| 376 DartUtils::NewString("_makeDatagram"), | 376 DartUtils::NewString("_makeDatagram"), |
| 377 kNumArgs, | 377 kNumArgs, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 intptr_t port = 0; | 481 intptr_t port = 0; |
| 482 SocketAddress* addr = Socket::GetRemotePeer(socket, &port); | 482 SocketAddress* addr = Socket::GetRemotePeer(socket, &port); |
| 483 if (addr != NULL) { | 483 if (addr != NULL) { |
| 484 Dart_Handle list = Dart_NewList(2); | 484 Dart_Handle list = Dart_NewList(2); |
| 485 | 485 |
| 486 Dart_Handle entry = Dart_NewList(3); | 486 Dart_Handle entry = Dart_NewList(3); |
| 487 Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType())); | 487 Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType())); |
| 488 Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string())); | 488 Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string())); |
| 489 | 489 |
| 490 RawAddr raw = addr->addr(); | 490 RawAddr raw = addr->addr(); |
| 491 intptr_t data_length = SocketAddress::GetAddrLength(&raw); | 491 intptr_t data_length = SocketAddress::GetAddrLength(raw); |
| 492 Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length); | 492 Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length); |
| 493 Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length); | 493 Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length); |
| 494 Dart_ListSetAt(entry, 2, data); | 494 Dart_ListSetAt(entry, 2, data); |
| 495 | 495 |
| 496 Dart_ListSetAt(list, 0, entry); | 496 Dart_ListSetAt(list, 0, entry); |
| 497 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); | 497 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); |
| 498 Dart_SetReturnValue(args, list); | 498 Dart_SetReturnValue(args, list); |
| 499 delete addr; | 499 delete addr; |
| 500 } else { | 500 } else { |
| 501 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 501 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 } | 548 } |
| 549 | 549 |
| 550 | 550 |
| 551 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { | 551 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { |
| 552 RawAddr addr; | 552 RawAddr addr; |
| 553 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 553 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 554 int64_t port = DartUtils::GetInt64ValueCheckRange( | 554 int64_t port = DartUtils::GetInt64ValueCheckRange( |
| 555 Dart_GetNativeArgument(args, 2), | 555 Dart_GetNativeArgument(args, 2), |
| 556 0, | 556 0, |
| 557 65535); | 557 65535); |
| 558 SocketAddress::SetAddrPort(&addr, port); |
| 558 int64_t backlog = DartUtils::GetInt64ValueCheckRange( | 559 int64_t backlog = DartUtils::GetInt64ValueCheckRange( |
| 559 Dart_GetNativeArgument(args, 3), | 560 Dart_GetNativeArgument(args, 3), |
| 560 0, | 561 0, |
| 561 65535); | 562 65535); |
| 562 bool v6_only = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4)); | 563 bool v6_only = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4)); |
| 563 bool shared = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5)); | 564 bool shared = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5)); |
| 564 | 565 |
| 565 Dart_Handle socket_object = Dart_GetNativeArgument(args, 0); | 566 Dart_Handle socket_object = Dart_GetNativeArgument(args, 0); |
| 566 Dart_Handle result = ListeningSocketRegistry::Instance()->CreateBindListen( | 567 Dart_Handle result = ListeningSocketRegistry::Instance()->CreateBindListen( |
| 567 socket_object, addr, port, backlog, v6_only, shared); | 568 socket_object, addr, backlog, v6_only, shared); |
| 568 Dart_SetReturnValue(args, result); | 569 Dart_SetReturnValue(args, result); |
| 569 } | 570 } |
| 570 | 571 |
| 571 | 572 |
| 572 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { | 573 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { |
| 573 intptr_t socket = | 574 intptr_t socket = |
| 574 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); | 575 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
| 575 intptr_t new_socket = ServerSocket::Accept(socket); | 576 intptr_t new_socket = ServerSocket::Accept(socket); |
| 576 if (new_socket >= 0) { | 577 if (new_socket >= 0) { |
| 577 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 1), new_socket); | 578 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 1), new_socket); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 604 | 605 |
| 605 CObjectInt32* type = new CObjectInt32( | 606 CObjectInt32* type = new CObjectInt32( |
| 606 CObject::NewInt32(addr->GetType())); | 607 CObject::NewInt32(addr->GetType())); |
| 607 entry->SetAt(0, type); | 608 entry->SetAt(0, type); |
| 608 | 609 |
| 609 CObjectString* as_string = new CObjectString(CObject::NewString( | 610 CObjectString* as_string = new CObjectString(CObject::NewString( |
| 610 addr->as_string())); | 611 addr->as_string())); |
| 611 entry->SetAt(1, as_string); | 612 entry->SetAt(1, as_string); |
| 612 | 613 |
| 613 RawAddr raw = addr->addr(); | 614 RawAddr raw = addr->addr(); |
| 614 CObjectUint8Array* data = SocketAddress::ToCObject(&raw); | 615 CObjectUint8Array* data = SocketAddress::ToCObject(raw); |
| 615 entry->SetAt(2, data); | 616 entry->SetAt(2, data); |
| 616 | 617 |
| 617 array->SetAt(i + 1, entry); | 618 array->SetAt(i + 1, entry); |
| 618 } | 619 } |
| 619 result = array; | 620 result = array; |
| 620 delete addresses; | 621 delete addresses; |
| 621 } else { | 622 } else { |
| 622 result = CObject::NewOSError(os_error); | 623 result = CObject::NewOSError(os_error); |
| 623 delete os_error; | 624 delete os_error; |
| 624 } | 625 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 | 683 |
| 683 CObjectInt32* type = new CObjectInt32( | 684 CObjectInt32* type = new CObjectInt32( |
| 684 CObject::NewInt32(addr->GetType())); | 685 CObject::NewInt32(addr->GetType())); |
| 685 entry->SetAt(0, type); | 686 entry->SetAt(0, type); |
| 686 | 687 |
| 687 CObjectString* as_string = new CObjectString(CObject::NewString( | 688 CObjectString* as_string = new CObjectString(CObject::NewString( |
| 688 addr->as_string())); | 689 addr->as_string())); |
| 689 entry->SetAt(1, as_string); | 690 entry->SetAt(1, as_string); |
| 690 | 691 |
| 691 RawAddr raw = addr->addr(); | 692 RawAddr raw = addr->addr(); |
| 692 CObjectUint8Array* data = SocketAddress::ToCObject(&raw); | 693 CObjectUint8Array* data = SocketAddress::ToCObject(raw); |
| 693 entry->SetAt(2, data); | 694 entry->SetAt(2, data); |
| 694 | 695 |
| 695 CObjectString* interface_name = new CObjectString(CObject::NewString( | 696 CObjectString* interface_name = new CObjectString(CObject::NewString( |
| 696 interface->interface_name())); | 697 interface->interface_name())); |
| 697 entry->SetAt(3, interface_name); | 698 entry->SetAt(3, interface_name); |
| 698 | 699 |
| 699 CObjectInt64* interface_index = new CObjectInt64(CObject::NewInt64( | 700 CObjectInt64* interface_index = new CObjectInt64(CObject::NewInt64( |
| 700 interface->interface_index())); | 701 interface->interface_index())); |
| 701 entry->SetAt(4, interface_index); | 702 entry->SetAt(4, interface_index); |
| 702 | 703 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 intptr_t socket = | 821 intptr_t socket = |
| 821 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); | 822 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
| 822 RawAddr addr; | 823 RawAddr addr; |
| 823 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 824 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 824 RawAddr interface; | 825 RawAddr interface; |
| 825 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { | 826 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { |
| 826 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); | 827 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); |
| 827 } | 828 } |
| 828 int interfaceIndex = | 829 int interfaceIndex = |
| 829 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); | 830 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
| 830 if (Socket::JoinMulticast(socket, &addr, &interface, interfaceIndex)) { | 831 if (Socket::JoinMulticast(socket, addr, interface, interfaceIndex)) { |
| 831 Dart_SetReturnValue(args, Dart_Null()); | 832 Dart_SetReturnValue(args, Dart_Null()); |
| 832 } else { | 833 } else { |
| 833 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 834 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 834 } | 835 } |
| 835 } | 836 } |
| 836 | 837 |
| 837 | 838 |
| 838 void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) { | 839 void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) { |
| 839 intptr_t socket = | 840 intptr_t socket = |
| 840 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); | 841 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
| 841 RawAddr addr; | 842 RawAddr addr; |
| 842 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); | 843 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
| 843 RawAddr interface; | 844 RawAddr interface; |
| 844 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { | 845 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { |
| 845 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); | 846 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); |
| 846 } | 847 } |
| 847 int interfaceIndex = | 848 int interfaceIndex = |
| 848 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); | 849 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
| 849 if (Socket::LeaveMulticast(socket, &addr, &interface, interfaceIndex)) { | 850 if (Socket::LeaveMulticast(socket, addr, interface, interfaceIndex)) { |
| 850 Dart_SetReturnValue(args, Dart_Null()); | 851 Dart_SetReturnValue(args, Dart_Null()); |
| 851 } else { | 852 } else { |
| 852 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 853 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
| 853 } | 854 } |
| 854 } | 855 } |
| 855 | 856 |
| 856 | 857 |
| 857 void FUNCTION_NAME(Socket_MarkSocketAsSharedHack)(Dart_NativeArguments args) { | 858 void FUNCTION_NAME(Socket_MarkSocketAsSharedHack)(Dart_NativeArguments args) { |
| 858 intptr_t socketfd = | 859 intptr_t socketfd = |
| 859 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); | 860 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 873 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) { | 874 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) { |
| 874 intptr_t socket = 0; | 875 intptr_t socket = 0; |
| 875 Dart_Handle err = | 876 Dart_Handle err = |
| 876 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket); | 877 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket); |
| 877 if (Dart_IsError(err)) Dart_PropagateError(err); | 878 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 878 return socket; | 879 return socket; |
| 879 } | 880 } |
| 880 | 881 |
| 881 } // namespace bin | 882 } // namespace bin |
| 882 } // namespace dart | 883 } // namespace dart |
| OLD | NEW |