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

Unified Diff: net/base/address_list.cc

Issue 1705001: Unit tests for HttpAuthHandlerNegotiate (Closed)
Patch Set: Respond to eroman's concerns. Created 10 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
« no previous file with comments | « net/base/address_list.h ('k') | net/base/mock_host_resolver.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/address_list.cc
diff --git a/net/base/address_list.cc b/net/base/address_list.cc
index cf7f0d5c8da6514e69d73702295ab9cf54afee19..1736a193ddc7329036eafbdfe71a4ff938b9ba38 100644
--- a/net/base/address_list.cc
+++ b/net/base/address_list.cc
@@ -13,6 +13,14 @@ namespace net {
namespace {
+char* do_strdup(const char* src) {
+#if defined(OS_WIN)
+ return _strdup(src);
+#else
+ return strdup(src);
+#endif
+}
+
// Make a copy of |info| (the dynamically-allocated parts are copied as well).
// If |recursive| is true, chained entries via ai_next are copied too.
// Copy returned by this function should be deleted using
@@ -27,11 +35,7 @@ struct addrinfo* CreateCopyOfAddrinfo(const struct addrinfo* info,
// ai_canonname is a NULL-terminated string.
if (info->ai_canonname) {
-#ifdef OS_WIN
- copy->ai_canonname = _strdup(info->ai_canonname);
-#else
- copy->ai_canonname = strdup(info->ai_canonname);
-#endif
+ copy->ai_canonname = do_strdup(info->ai_canonname);
}
// ai_addr is a buffer of length ai_addrlen.
@@ -162,21 +166,45 @@ void AddressList::Reset() {
}
// static
-AddressList AddressList::CreateIPv6Address(unsigned char data[16]) {
+AddressList AddressList::CreateIPv4Address(unsigned char data[4],
+ const std::string& canonical_name) {
struct addrinfo* ai = new addrinfo;
memset(ai, 0, sizeof(addrinfo));
+ ai->ai_family = AF_INET;
+ ai->ai_socktype = SOCK_STREAM;
+ const size_t sockaddr_in_size = sizeof(struct sockaddr_in);
+ ai->ai_addrlen = sockaddr_in_size;
+ if (!canonical_name.empty())
+ ai->ai_canonname = do_strdup(canonical_name.c_str());
+
+ struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(
+ new char[sockaddr_in_size]);
+ memset(addr, 0, sockaddr_in_size);
+ addr->sin_family = AF_INET;
+ memcpy(&addr->sin_addr, data, 4);
+ ai->ai_addr = reinterpret_cast<struct sockaddr*>(addr);
+
+ return AddressList(new Data(ai, false /*is_system_created*/));
+}
+// static
+AddressList AddressList::CreateIPv6Address(unsigned char data[16],
+ const std::string& canonical_name) {
+ struct addrinfo* ai = new addrinfo;
+ memset(ai, 0, sizeof(addrinfo));
ai->ai_family = AF_INET6;
ai->ai_socktype = SOCK_STREAM;
- ai->ai_addrlen = sizeof(struct sockaddr_in6);
+ const size_t sockaddr_in6_size = sizeof(struct sockaddr_in6);
+ ai->ai_addrlen = sockaddr_in6_size;
+ if (!canonical_name.empty())
+ ai->ai_canonname = do_strdup(canonical_name.c_str());
struct sockaddr_in6* addr6 = reinterpret_cast<struct sockaddr_in6*>(
- new char[ai->ai_addrlen]);
- memset(addr6, 0, sizeof(struct sockaddr_in6));
-
- ai->ai_addr = reinterpret_cast<struct sockaddr*>(addr6);
+ new char[sockaddr_in6_size]);
+ memset(addr6, 0, sockaddr_in6_size);
addr6->sin6_family = AF_INET6;
memcpy(&addr6->sin6_addr, data, 16);
+ ai->ai_addr = reinterpret_cast<struct sockaddr*>(addr6);
return AddressList(new Data(ai, false /*is_system_created*/));
}
« no previous file with comments | « net/base/address_list.h ('k') | net/base/mock_host_resolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698