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

Unified Diff: runtime/bin/socket.h

Issue 14083007: Add new InternetAddress class with a static lookup function (including IPv6 results). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: runtime/bin/socket.h
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index b68b782e70f883bfe65f3bd965b72cc9eb244f3a..729a8bd24adb30905de475e1493b8212c86b9c0d 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -23,6 +23,46 @@
#error Unknown target os.
#endif
+class SocketAddress {
+ public:
+ enum Type {
+ IPv4 = 0,
+ IPv6 = 1,
+ };
+
+ SocketAddress(Type type,
+ const char* as_string,
+ uint8_t* data,
+ intptr_t length)
+ : type(type), as_string(as_string), data(data), length(length) {}
+
+ ~SocketAddress() {
+ delete[] as_string;
+ delete[] data;
+ }
+
+ Type type;
Søren Gjesse 2013/04/18 09:07:40 Make these mempers private with _ postfix. Then ad
Anders Johnsen 2013/04/18 12:09:45 Done.
+ const char* as_string;
+ uint8_t* data;
Søren Gjesse 2013/04/18 09:07:40 can't this be sockaddr_storage address
Anders Johnsen 2013/04/18 12:09:45 Done.
+ const intptr_t length;
Søren Gjesse 2013/04/18 09:07:40 Please add: private: DISALLOW_COPY_AND_ASSIGN(
Anders Johnsen 2013/04/18 12:09:45 Done.
+};
+
+class SocketAddresses {
+ public:
+ explicit SocketAddresses(intptr_t count)
+ : count(count),
+ addresses(new SocketAddress*[count]) {}
+
+ ~SocketAddresses() {
+ for (intptr_t i = 0; i < count; i++) {
+ delete addresses[i];
+ }
+ delete[] addresses;
+ }
+
Søren Gjesse 2013/04/18 09:07:40 As above.
Anders Johnsen 2013/04/18 12:09:45 Done.
+ const intptr_t count;
+ SocketAddress** addresses;
+};
class Socket {
public:
@@ -34,7 +74,10 @@ class Socket {
static intptr_t Available(intptr_t fd);
static int Read(intptr_t fd, void* buffer, intptr_t num_bytes);
static int Write(intptr_t fd, const void* buffer, intptr_t num_bytes);
- static intptr_t CreateConnect(const char* host, const intptr_t port);
+ static intptr_t CreateConnect(SocketAddress::Type type,
+ uint8_t* host_data,
+ intptr_t host_length,
+ const intptr_t port);
static intptr_t GetPort(intptr_t fd);
static bool GetRemotePeer(intptr_t fd, char* host, intptr_t* port);
static void GetError(intptr_t fd, OSError* os_error);
@@ -45,9 +88,8 @@ class Socket {
static bool SetBlocking(intptr_t fd);
static bool SetNoDelay(intptr_t fd, bool enabled);
- // Perform a IPv4 hostname lookup. Returns the hostname string in
- // IPv4 dotted-decimal format.
- static const char* LookupIPv4Address(char* host, OSError** os_error);
+ // Perform a hostname lookup. Returns the SocketAddresses.
+ static SocketAddresses* LookupAddress(char* host, OSError** os_error);
static Dart_Port GetServicePort();
@@ -76,7 +118,9 @@ class ServerSocket {
//
// -1: system error (errno set)
// -5: invalid bindAddress
- static intptr_t CreateBindListen(const char* bindAddress,
+ static intptr_t CreateBindListen(SocketAddress::Type type,
+ uint8_t* host_data,
+ intptr_t host_length,
intptr_t port,
intptr_t backlog);
« no previous file with comments | « runtime/bin/io_natives.cc ('k') | runtime/bin/socket.cc » ('j') | runtime/bin/socket_linux.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698