| Index: net/base/address_list.cc
|
| diff --git a/net/base/address_list.cc b/net/base/address_list.cc
|
| index 1c9731126ea2041961ee92f4e6abf2d65629670d..75c30b85a851d30ab392fe4156b28ac54c8beeea 100644
|
| --- a/net/base/address_list.cc
|
| +++ b/net/base/address_list.cc
|
| @@ -85,6 +85,53 @@ void SetPortRecursive(struct addrinfo* info, int port) {
|
|
|
| } // namespace
|
|
|
| +AddressList::AddressList(const IPAddressNumber& address, int port,
|
| + bool canonicalize_name) {
|
| + struct addrinfo* ai = new addrinfo;
|
| + memset(ai, 0, sizeof(addrinfo));
|
| + ai->ai_socktype = SOCK_STREAM;
|
| +
|
| + switch (address.size()) {
|
| + case 4: {
|
| + ai->ai_family = AF_INET;
|
| + const size_t sockaddr_in_size = sizeof(struct sockaddr_in);
|
| + ai->ai_addrlen = sockaddr_in_size;
|
| +
|
| + 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, &address[0], 4);
|
| + ai->ai_addr = reinterpret_cast<struct sockaddr*>(addr);
|
| + break;
|
| + }
|
| + case 16: {
|
| + ai->ai_family = AF_INET6;
|
| + const size_t sockaddr_in6_size = sizeof(struct sockaddr_in6);
|
| + ai->ai_addrlen = sockaddr_in6_size;
|
| +
|
| + struct sockaddr_in6* addr6 = reinterpret_cast<struct sockaddr_in6*>(
|
| + new char[sockaddr_in6_size]);
|
| + memset(addr6, 0, sockaddr_in6_size);
|
| + addr6->sin6_family = AF_INET6;
|
| + memcpy(&addr6->sin6_addr, &address[0], 16);
|
| + ai->ai_addr = reinterpret_cast<struct sockaddr*>(addr6);
|
| + break;
|
| + }
|
| + default: {
|
| + NOTREACHED() << "Bad IP address";
|
| + break;
|
| + }
|
| + }
|
| +
|
| + if (canonicalize_name) {
|
| + std::string name = NetAddressToString(ai);
|
| + ai->ai_canonname = do_strdup(name.c_str());
|
| + }
|
| + data_ = new Data(ai, false /*is_system_created*/);
|
| + SetPort(port);
|
| +}
|
| +
|
| void AddressList::Adopt(struct addrinfo* head) {
|
| data_ = new Data(head, true /*is_system_created*/);
|
| }
|
| @@ -143,50 +190,6 @@ void AddressList::Reset() {
|
| data_ = NULL;
|
| }
|
|
|
| -// static
|
| -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;
|
| - 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[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*/));
|
| -}
|
| -
|
| AddressList::Data::Data(struct addrinfo* ai, bool is_system_created)
|
| : head(ai), is_system_created(is_system_created) {
|
| DCHECK(head);
|
|
|