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

Unified Diff: net/base/ip_endpoint.cc

Issue 10309002: Reimplements net::AddressList without struct addrinfo. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: get_canonical_name -> canonical_name. iterator to indexing Created 8 years, 7 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
« no previous file with comments | « net/base/ip_endpoint.h ('k') | net/base/ip_endpoint_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/ip_endpoint.cc
diff --git a/net/base/ip_endpoint.cc b/net/base/ip_endpoint.cc
index e962d9104fe1cf973a2a7ebf2dee7ca872dc1730..b8a161b33f9541709319dd999d5168358105d3b6 100644
--- a/net/base/ip_endpoint.cc
+++ b/net/base/ip_endpoint.cc
@@ -15,6 +15,12 @@
namespace net {
+namespace {
+// By definition, socklen_t is large enough to hold both sizes.
+const socklen_t kSockaddrInSize = sizeof(struct sockaddr_in);
+const socklen_t kSockaddrIn6Size = sizeof(struct sockaddr_in6);
+}
+
IPEndPoint::IPEndPoint() : port_(0) {}
IPEndPoint::~IPEndPoint() {}
@@ -30,28 +36,25 @@ IPEndPoint::IPEndPoint(const IPEndPoint& endpoint) {
int IPEndPoint::GetFamily() const {
switch (address_.size()) {
- case kIPv4AddressSize: {
+ case kIPv4AddressSize:
return AF_INET;
- }
- case kIPv6AddressSize: {
+ case kIPv6AddressSize:
return AF_INET6;
- }
- default: {
+ default:
NOTREACHED() << "Bad IP address";
return AF_UNSPEC;
- }
}
}
bool IPEndPoint::ToSockAddr(struct sockaddr* address,
- size_t* address_length) const {
+ socklen_t* address_length) const {
DCHECK(address);
DCHECK(address_length);
switch (address_.size()) {
case kIPv4AddressSize: {
- if (*address_length < sizeof(struct sockaddr_in))
+ if (*address_length < kSockaddrInSize)
return false;
- *address_length = sizeof(struct sockaddr_in);
+ *address_length = kSockaddrInSize;
struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(address);
memset(addr, 0, sizeof(struct sockaddr_in));
addr->sin_family = AF_INET;
@@ -60,9 +63,9 @@ bool IPEndPoint::ToSockAddr(struct sockaddr* address,
break;
}
case kIPv6AddressSize: {
- if (*address_length < sizeof(struct sockaddr_in6))
+ if (*address_length < kSockaddrIn6Size)
return false;
- *address_length = sizeof(struct sockaddr_in6);
+ *address_length = kSockaddrIn6Size;
struct sockaddr_in6* addr6 =
reinterpret_cast<struct sockaddr_in6*>(address);
memset(addr6, 0, sizeof(struct sockaddr_in6));
@@ -71,20 +74,18 @@ bool IPEndPoint::ToSockAddr(struct sockaddr* address,
memcpy(&addr6->sin6_addr, &address_[0], kIPv6AddressSize);
break;
}
- default: {
- NOTREACHED() << "Bad IP address";
- break;
- }
+ default:
+ return false;
}
return true;
}
bool IPEndPoint::FromSockAddr(const struct sockaddr* address,
- size_t address_length) {
+ socklen_t address_length) {
DCHECK(address);
switch (address->sa_family) {
case AF_INET: {
- if (address_length < sizeof(struct sockaddr_in))
+ if (address_length < kSockaddrInSize)
return false;
const struct sockaddr_in* addr =
reinterpret_cast<const struct sockaddr_in*>(address);
@@ -94,7 +95,7 @@ bool IPEndPoint::FromSockAddr(const struct sockaddr* address,
break;
}
case AF_INET6: {
- if (address_length < sizeof(struct sockaddr_in6))
+ if (address_length < kSockaddrIn6Size)
return false;
const struct sockaddr_in6* addr =
reinterpret_cast<const struct sockaddr_in6*>(address);
@@ -103,22 +104,28 @@ bool IPEndPoint::FromSockAddr(const struct sockaddr* address,
address_.assign(&bytes[0], &bytes[kIPv6AddressSize]);
break;
}
- default: {
- NOTREACHED() << "Bad IP address";
- break;
- }
+ default:
+ return false;
}
return true;
}
std::string IPEndPoint::ToString() const {
- struct sockaddr_storage addr_storage;
- size_t addr_len = sizeof(addr_storage);
- struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
- if (!ToSockAddr(addr, &addr_len)) {
- return "";
+ SockaddrStorage storage;
+ if (!ToSockAddr(storage.addr, &storage.addr_len)) {
+ return std::string();
+ }
+ // TODO(szym): Don't use getnameinfo. http://crbug.com/126212
+ return NetAddressToStringWithPort(storage.addr, storage.addr_len);
+}
+
+std::string IPEndPoint::ToStringWithoutPort() const {
+ SockaddrStorage storage;
+ if (!ToSockAddr(storage.addr, &storage.addr_len)) {
+ return std::string();
}
- return NetAddressToStringWithPort(addr, addr_len);
+ // TODO(szym): Don't use getnameinfo. http://crbug.com/126212
+ return NetAddressToString(storage.addr, storage.addr_len);
}
bool IPEndPoint::operator<(const IPEndPoint& that) const {
« no previous file with comments | « net/base/ip_endpoint.h ('k') | net/base/ip_endpoint_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698