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

Unified Diff: runtime/bin/socket.h

Issue 16514010: Add NetworkAdaptor to dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Clean up implementation and add tests. Created 7 years, 6 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 46780fc54a1338e29090208a783608741d8d6ab3..382decea1b06fcce7dab64a49b5c52f05c9cf85e 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -51,7 +51,9 @@ class SocketAddress {
ADDRESS_LAST = ADDRESS_ANY_IP_V6,
};
- explicit SocketAddress(struct addrinfo* addrinfo);
+ explicit SocketAddress(struct sockaddr* sockaddr);
+
+ ~SocketAddress() {}
int GetType() {
if (addr_.ss.ss_family == AF_INET6) return TYPE_IPV6;
@@ -96,13 +98,36 @@ class SocketAddress {
DISALLOW_COPY_AND_ASSIGN(SocketAddress);
};
-class SocketAddresses {
+class InterfaceSocketAddress {
public:
- explicit SocketAddresses(intptr_t count)
+ explicit InterfaceSocketAddress(struct sockaddr* sockaddr,
+ const char* interface_name)
+ : socket_address_(new SocketAddress(sockaddr)),
+ interface_name_(interface_name) {}
+
+ ~InterfaceSocketAddress() {
+ delete socket_address_;
+ delete interface_name_;
+ }
+
+ SocketAddress* socket_address() const { return socket_address_; }
+ const char* interface_name() const { return interface_name_; }
+
+ private:
+ SocketAddress* socket_address_;
+ const char* interface_name_;
+
+ DISALLOW_COPY_AND_ASSIGN(InterfaceSocketAddress);
+};
+
+template<typename T>
+class AddressList {
+ public:
+ explicit AddressList(intptr_t count)
: count_(count),
- addresses_(new SocketAddress*[count_]) {}
+ addresses_(new T*[count_]) {}
- ~SocketAddresses() {
+ ~AddressList() {
for (intptr_t i = 0; i < count_; i++) {
delete addresses_[i];
}
@@ -110,20 +135,21 @@ class SocketAddresses {
}
intptr_t count() const { return count_; }
- SocketAddress* GetAt(intptr_t i) const { return addresses_[i]; }
- void SetAt(intptr_t i, SocketAddress* addr) { addresses_[i] = addr; }
+ T* GetAt(intptr_t i) const { return addresses_[i]; }
+ void SetAt(intptr_t i, T* addr) { addresses_[i] = addr; }
private:
const intptr_t count_;
- SocketAddress** addresses_;
+ T** addresses_;
- DISALLOW_COPY_AND_ASSIGN(SocketAddresses);
+ DISALLOW_COPY_AND_ASSIGN(AddressList);
};
class Socket {
public:
enum SocketRequest {
kLookupRequest = 0,
+ kListInterfacesRequest = 1,
};
static bool Initialize();
@@ -144,10 +170,15 @@ class Socket {
static bool SetBlocking(intptr_t fd);
static bool SetNoDelay(intptr_t fd, bool enabled);
- // Perform a hostname lookup. Returns the SocketAddresses.
- static SocketAddresses* LookupAddress(const char* host,
- int type,
- OSError** os_error);
+ // Perform a hostname lookup. Returns a AddressList of SocketAddress's.
+ static AddressList<SocketAddress>* LookupAddress(const char* host,
+ int type,
+ OSError** os_error);
+
+ // List interfaces. Returns a AddressList of InterfaceSocketAddress's.
+ static AddressList<InterfaceSocketAddress>* ListInterfaces(
+ int type,
+ OSError** os_error);
static Dart_Port GetServicePort();
@@ -181,6 +212,7 @@ class ServerSocket {
intptr_t backlog,
bool v6_only = false);
+ private:
DISALLOW_ALLOCATION();
DISALLOW_IMPLICIT_CONSTRUCTORS(ServerSocket);
};

Powered by Google App Engine
This is Rietveld 408576698