Index: runtime/bin/socket.cc |
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc |
index 4dfbe503fa750f586c45091acb6e6cc59950c660..48acaf37a75f3000954ff3b4ffa8a1d8c9361876 100644 |
--- a/runtime/bin/socket.cc |
+++ b/runtime/bin/socket.cc |
@@ -235,13 +235,24 @@ void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { |
if (Dart_IsError(err)) Dart_PropagateError(err); |
OSError os_error; |
intptr_t port = 0; |
- ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); |
- char host[INET6_ADDRSTRLEN]; |
- if (Socket::GetRemotePeer(socket, host, &port)) { |
+ SocketAddress* addr = Socket::GetRemotePeer(socket, &port); |
+ if (addr != NULL) { |
Dart_Handle list = Dart_NewList(2); |
- Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); |
+ |
+ Dart_Handle entry = Dart_NewList(3); |
+ Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType())); |
+ Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string())); |
+ |
+ RawAddr raw = addr->addr(); |
+ intptr_t data_length = SocketAddress::GetAddrLength(&raw); |
+ Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length); |
+ Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length); |
+ Dart_ListSetAt(entry, 2, data); |
+ |
+ Dart_ListSetAt(list, 0, entry); |
Dart_ListSetAt(list, 1, Dart_NewInteger(port)); |
Dart_SetReturnValue(args, list); |
+ delete addr; |
} else { |
Dart_SetReturnValue(args, DartUtils::NewDartOSError()); |
} |