Index: runtime/bin/socket.cc |
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc |
index 9728902ba9eddbf0010a4ff063a0ca338316157f..500252487edf67b8a9766a6683d96ae65d04b51b 100644 |
--- a/runtime/bin/socket.cc |
+++ b/runtime/bin/socket.cc |
@@ -148,6 +148,7 @@ Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object, |
// socket_object. |
Socket::ReuseSocketIdNativeField(socket_object, os_socket->socketfd, |
true); |
+ |
return Dart_True(); |
} |
} |
@@ -167,7 +168,7 @@ Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object, |
OSError os_error(-1, "Failed to start accept", OSError::kUnknown); |
return DartUtils::NewDartOSError(&os_error); |
} |
- intptr_t allocated_port = SocketBase::GetPort(fd); |
+ intptr_t allocated_port = Socket::GetPort(fd); |
ASSERT(allocated_port > 0); |
if (allocated_port != port) { |
@@ -267,6 +268,33 @@ bool ListeningSocketRegistry::CloseSafe(Socket* socketfd) { |
} |
+void FUNCTION_NAME(InternetAddress_Parse)(Dart_NativeArguments args) { |
+ const char* address = |
+ DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
+ ASSERT(address != NULL); |
+ RawAddr raw; |
+ memset(&raw, 0, sizeof(raw)); |
+ int type = strchr(address, ':') == NULL ? SocketAddress::TYPE_IPV4 |
+ : SocketAddress::TYPE_IPV6; |
+ if (type == SocketAddress::TYPE_IPV4) { |
+ raw.addr.sa_family = AF_INET; |
+ } else { |
+ raw.addr.sa_family = AF_INET6; |
+ } |
+ bool ok = Socket::ParseAddress(type, address, &raw); |
+ if (!ok) { |
+ Dart_SetReturnValue(args, Dart_Null()); |
+ } else { |
+ Dart_SetReturnValue(args, SocketAddress::ToTypedData(raw)); |
+ } |
+} |
+ |
+ |
+void FUNCTION_NAME(NetworkInterface_ListSupported)(Dart_NativeArguments args) { |
+ Dart_SetReturnValue(args, Dart_NewBoolean(Socket::ListInterfacesSupported())); |
+} |
+ |
+ |
void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { |
RawAddr addr; |
SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); |
@@ -304,6 +332,12 @@ void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) { |
} |
} |
+void FUNCTION_NAME(Socket_IsBindError)(Dart_NativeArguments args) { |
+ intptr_t error_number = |
+ DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1)); |
+ bool is_bind_error = Socket::IsBindError(error_number); |
+ Dart_SetReturnValue(args, is_bind_error ? Dart_True() : Dart_False()); |
+} |
void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) { |
RawAddr addr; |
@@ -327,7 +361,7 @@ void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) { |
void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { |
Socket* socket = |
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
- intptr_t available = SocketBase::Available(socket->fd()); |
+ intptr_t available = Socket::Available(socket->fd()); |
if (available >= 0) { |
Dart_SetReturnValue(args, Dart_NewInteger(available)); |
} else { |
@@ -352,7 +386,7 @@ void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { |
Dart_PropagateError(result); |
} |
ASSERT(buffer != NULL); |
- intptr_t bytes_read = SocketBase::Read(socket->fd(), buffer, length); |
+ intptr_t bytes_read = Socket::Read(socket->fd(), buffer, length); |
if (bytes_read == length) { |
Dart_SetReturnValue(args, result); |
} else if (bytes_read > 0) { |
@@ -392,7 +426,7 @@ void FUNCTION_NAME(Socket_RecvFrom)(Dart_NativeArguments args) { |
reinterpret_cast<uint8_t*>(malloc(65536)); |
} |
RawAddr addr; |
- intptr_t bytes_read = SocketBase::RecvFrom( |
+ intptr_t bytes_read = Socket::RecvFrom( |
socket->fd(), isolate_data->udp_receive_buffer, 65536, &addr); |
if (bytes_read == 0) { |
Dart_SetReturnValue(args, Dart_Null()); |
@@ -423,7 +457,7 @@ void FUNCTION_NAME(Socket_RecvFrom)(Dart_NativeArguments args) { |
} |
// Format the address to a string using the numeric format. |
char numeric_address[INET6_ADDRSTRLEN]; |
- SocketBase::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN); |
+ Socket::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN); |
// Create a Datagram object with the data and sender address and port. |
const int kNumArgs = 4; |
@@ -473,7 +507,7 @@ void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { |
} |
ASSERT((offset + length) <= len); |
buffer += offset; |
- intptr_t bytes_written = SocketBase::Write(socket->fd(), buffer, length); |
+ intptr_t bytes_written = Socket::Write(socket->fd(), buffer, length); |
if (bytes_written >= 0) { |
Dart_TypedDataReleaseData(buffer_obj); |
if (short_write) { |
@@ -515,8 +549,7 @@ void FUNCTION_NAME(Socket_SendTo)(Dart_NativeArguments args) { |
} |
ASSERT((offset + length) <= len); |
buffer += offset; |
- intptr_t bytes_written = |
- SocketBase::SendTo(socket->fd(), buffer, length, addr); |
+ intptr_t bytes_written = Socket::SendTo(socket->fd(), buffer, length, addr); |
if (bytes_written >= 0) { |
Dart_TypedDataReleaseData(buffer_obj); |
Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); |
@@ -533,7 +566,7 @@ void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { |
Socket* socket = |
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
OSError os_error; |
- intptr_t port = SocketBase::GetPort(socket->fd()); |
+ intptr_t port = Socket::GetPort(socket->fd()); |
if (port > 0) { |
Dart_SetReturnValue(args, Dart_NewInteger(port)); |
} else { |
@@ -547,7 +580,7 @@ void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { |
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
OSError os_error; |
intptr_t port = 0; |
- SocketAddress* addr = SocketBase::GetRemotePeer(socket->fd(), &port); |
+ SocketAddress* addr = Socket::GetRemotePeer(socket->fd(), &port); |
if (addr != NULL) { |
Dart_Handle list = Dart_NewList(2); |
@@ -572,7 +605,7 @@ void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { |
Socket* socket = |
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
OSError os_error; |
- SocketBase::GetError(socket->fd(), &os_error); |
+ Socket::GetError(socket->fd(), &os_error); |
Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); |
} |
@@ -581,7 +614,7 @@ void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { |
Socket* socket = |
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); |
OSError os_error; |
- intptr_t type = SocketBase::GetType(socket->fd()); |
+ intptr_t type = Socket::GetType(socket->fd()); |
if (type >= 0) { |
Dart_SetReturnValue(args, Dart_NewInteger(type)); |
} else { |
@@ -593,7 +626,7 @@ void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { |
void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { |
int64_t num = |
DartUtils::GetInt64ValueCheckRange(Dart_GetNativeArgument(args, 1), 0, 2); |
- intptr_t socket = SocketBase::GetStdioHandle(num); |
+ intptr_t socket = Socket::GetStdioHandle(num); |
Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket, |
false); |
Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); |
@@ -656,7 +689,7 @@ CObject* Socket::LookupRequest(const CObjectArray& request) { |
CObject* result = NULL; |
OSError* os_error = NULL; |
AddressList<SocketAddress>* addresses = |
- SocketBase::LookupAddress(host.CString(), type.Value(), &os_error); |
+ Socket::LookupAddress(host.CString(), type.Value(), &os_error); |
if (addresses != NULL) { |
CObjectArray* array = |
new CObjectArray(CObject::NewArray(addresses->count() + 1)); |
@@ -711,7 +744,7 @@ CObject* Socket::ReverseLookupRequest(const CObjectArray& request) { |
OSError* os_error = NULL; |
const intptr_t kMaxHostLength = 1025; |
char host[kMaxHostLength]; |
- if (SocketBase::ReverseLookup(addr, host, kMaxHostLength, &os_error)) { |
+ if (Socket::ReverseLookup(addr, host, kMaxHostLength, &os_error)) { |
return new CObjectString(CObject::NewString(host)); |
} else { |
CObject* result = CObject::NewOSError(os_error); |
@@ -729,7 +762,7 @@ CObject* Socket::ListInterfacesRequest(const CObjectArray& request) { |
CObject* result = NULL; |
OSError* os_error = NULL; |
AddressList<InterfaceSocketAddress>* addresses = |
- SocketBase::ListInterfaces(type.Value(), &os_error); |
+ Socket::ListInterfaces(type.Value(), &os_error); |
if (addresses != NULL) { |
CObjectArray* array = |
new CObjectArray(CObject::NewArray(addresses->count() + 1)); |
@@ -783,7 +816,7 @@ void FUNCTION_NAME(Socket_GetOption)(Dart_NativeArguments args) { |
switch (option) { |
case 0: { // TCP_NODELAY. |
bool enabled; |
- ok = SocketBase::GetNoDelay(socket->fd(), &enabled); |
+ ok = Socket::GetNoDelay(socket->fd(), &enabled); |
if (ok) { |
Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False()); |
} |
@@ -791,7 +824,7 @@ void FUNCTION_NAME(Socket_GetOption)(Dart_NativeArguments args) { |
} |
case 1: { // IP_MULTICAST_LOOP. |
bool enabled; |
- ok = SocketBase::GetMulticastLoop(socket->fd(), protocol, &enabled); |
+ ok = Socket::GetMulticastLoop(socket->fd(), protocol, &enabled); |
if (ok) { |
Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False()); |
} |
@@ -799,7 +832,7 @@ void FUNCTION_NAME(Socket_GetOption)(Dart_NativeArguments args) { |
} |
case 2: { // IP_MULTICAST_TTL. |
int value; |
- ok = SocketBase::GetMulticastHops(socket->fd(), protocol, &value); |
+ ok = Socket::GetMulticastHops(socket->fd(), protocol, &value); |
if (ok) { |
Dart_SetReturnValue(args, Dart_NewInteger(value)); |
} |
@@ -811,7 +844,7 @@ void FUNCTION_NAME(Socket_GetOption)(Dart_NativeArguments args) { |
} |
case 4: { // IP_BROADCAST. |
bool enabled; |
- ok = SocketBase::GetBroadcast(socket->fd(), &enabled); |
+ ok = Socket::GetBroadcast(socket->fd(), &enabled); |
if (ok) { |
Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False()); |
} |
@@ -838,17 +871,17 @@ void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) { |
SocketAddress::TYPE_IPV6); |
switch (option) { |
case 0: // TCP_NODELAY. |
- result = SocketBase::SetNoDelay( |
+ result = Socket::SetNoDelay( |
socket->fd(), |
DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3))); |
break; |
case 1: // IP_MULTICAST_LOOP. |
- result = SocketBase::SetMulticastLoop( |
+ result = Socket::SetMulticastLoop( |
socket->fd(), protocol, |
DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3))); |
break; |
case 2: // IP_MULTICAST_TTL. |
- result = SocketBase::SetMulticastHops( |
+ result = Socket::SetMulticastHops( |
socket->fd(), protocol, |
DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3))); |
break; |
@@ -857,7 +890,7 @@ void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) { |
break; |
} |
case 4: // IP_BROADCAST. |
- result = SocketBase::SetBroadcast( |
+ result = Socket::SetBroadcast( |
socket->fd(), |
DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3))); |
break; |
@@ -884,8 +917,7 @@ void FUNCTION_NAME(Socket_JoinMulticast)(Dart_NativeArguments args) { |
} |
int interfaceIndex = |
DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
- if (SocketBase::JoinMulticast(socket->fd(), addr, interface, |
- interfaceIndex)) { |
+ if (Socket::JoinMulticast(socket->fd(), addr, interface, interfaceIndex)) { |
Dart_SetReturnValue(args, Dart_Null()); |
} else { |
Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
@@ -904,8 +936,7 @@ void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) { |
} |
int interfaceIndex = |
DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
- if (SocketBase::LeaveMulticast(socket->fd(), addr, interface, |
- interfaceIndex)) { |
+ if (Socket::LeaveMulticast(socket->fd(), addr, interface, interfaceIndex)) { |
Dart_SetReturnValue(args, Dart_Null()); |
} else { |
Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |