Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/address_list.h" | 5 #include "net/base/address_list.h" |
| 6 | 6 |
| 7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 #include "base/sys_byteorder.h" | 8 #include "base/sys_byteorder.h" |
| 9 #include "net/base/net_util.h" | 9 #include "net/base/net_util.h" |
| 10 #include "net/base/sys_addrinfo.h" | 10 #include "net/base/sys_addrinfo.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 // so just zero-ing them out for consistency. | 22 // so just zero-ing them out for consistency. |
| 23 memset(&address, 0x0, sizeof(address)); | 23 memset(&address, 0x0, sizeof(address)); |
| 24 // But we need to set the family. | 24 // But we need to set the family. |
| 25 address.sin_family = AF_INET; | 25 address.sin_family = AF_INET; |
| 26 struct addrinfo ai; | 26 struct addrinfo ai; |
| 27 memset(&ai, 0x0, sizeof(ai)); | 27 memset(&ai, 0x0, sizeof(ai)); |
| 28 ai.ai_family = AF_INET; | 28 ai.ai_family = AF_INET; |
| 29 ai.ai_socktype = SOCK_STREAM; | 29 ai.ai_socktype = SOCK_STREAM; |
| 30 ai.ai_addrlen = sizeof(address); | 30 ai.ai_addrlen = sizeof(address); |
| 31 ai.ai_addr = reinterpret_cast<sockaddr*>(&address); | 31 ai.ai_addr = reinterpret_cast<sockaddr*>(&address); |
| 32 ai.ai_canonname = const_cast<char *>(kCanonicalHostname); | 32 ai.ai_canonname = const_cast<char*>(kCanonicalHostname); |
| 33 | 33 |
| 34 // Copy the addrinfo struct into an AddressList object and | 34 // Copy the addrinfo struct into an AddressList object and |
| 35 // make sure it seems correct. | 35 // make sure it seems correct. |
| 36 AddressList addrlist1 = AddressList::CreateFromAddrinfo(&ai); | 36 AddressList addrlist1 = AddressList::CreateFromAddrinfo(&ai); |
| 37 EXPECT_EQ("canonical.bar.com", addrlist1.canonical_name()); | 37 EXPECT_EQ("canonical.bar.com", addrlist1.canonical_name()); |
| 38 | 38 |
| 39 // Copy the AddressList to another one. | 39 // Copy the AddressList to another one. |
| 40 AddressList addrlist2 = addrlist1; | 40 AddressList addrlist2 = addrlist1; |
| 41 EXPECT_EQ("canonical.bar.com", addrlist2.canonical_name()); | 41 EXPECT_EQ("canonical.bar.com", addrlist2.canonical_name()); |
| 42 } | 42 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 | 88 |
| 89 TEST(AddressListTest, CreateFromIPAddressList) { | 89 TEST(AddressListTest, CreateFromIPAddressList) { |
| 90 struct TestData { | 90 struct TestData { |
| 91 std::string ip_address; | 91 std::string ip_address; |
| 92 const char* in_addr; | 92 const char* in_addr; |
| 93 int ai_family; | 93 int ai_family; |
| 94 size_t ai_addrlen; | 94 size_t ai_addrlen; |
| 95 size_t in_addr_offset; | 95 size_t in_addr_offset; |
| 96 size_t in_addr_size; | 96 size_t in_addr_size; |
| 97 } tests[] = { | 97 } tests[] = { |
| 98 { "127.0.0.1", | 98 { |
| 99 "\x7f\x00\x00\x01", | 99 "127.0.0.1", |
|
mef
2014/10/10 20:38:16
this formatting looks ok, but not quite great.
| |
| 100 AF_INET, | 100 "\x7f\x00\x00\x01", |
| 101 sizeof(struct sockaddr_in), | 101 AF_INET, |
| 102 offsetof(struct sockaddr_in, sin_addr), | 102 sizeof(struct sockaddr_in), |
| 103 sizeof(struct in_addr), | 103 offsetof(struct sockaddr_in, sin_addr), |
| 104 }, | 104 sizeof(struct in_addr), |
| 105 { "2001:db8:0::42", | 105 }, |
| 106 "\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42", | 106 { |
| 107 AF_INET6, | 107 "2001:db8:0::42", |
| 108 sizeof(struct sockaddr_in6), | 108 "\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42", |
| 109 offsetof(struct sockaddr_in6, sin6_addr), | 109 AF_INET6, |
| 110 sizeof(struct in6_addr), | 110 sizeof(struct sockaddr_in6), |
| 111 }, | 111 offsetof(struct sockaddr_in6, sin6_addr), |
| 112 { "192.168.1.1", | 112 sizeof(struct in6_addr), |
| 113 "\xc0\xa8\x01\x01", | 113 }, |
| 114 AF_INET, | 114 { |
| 115 sizeof(struct sockaddr_in), | 115 "192.168.1.1", |
| 116 offsetof(struct sockaddr_in, sin_addr), | 116 "\xc0\xa8\x01\x01", |
| 117 sizeof(struct in_addr), | 117 AF_INET, |
| 118 }, | 118 sizeof(struct sockaddr_in), |
| 119 }; | 119 offsetof(struct sockaddr_in, sin_addr), |
| 120 sizeof(struct in_addr), | |
| 121 }, | |
| 122 }; | |
| 120 const std::string kCanonicalName = "canonical.example.com"; | 123 const std::string kCanonicalName = "canonical.example.com"; |
| 121 | 124 |
| 122 // Construct a list of ip addresses. | 125 // Construct a list of ip addresses. |
| 123 IPAddressList ip_list; | 126 IPAddressList ip_list; |
| 124 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 127 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 125 IPAddressNumber ip_number; | 128 IPAddressNumber ip_number; |
| 126 ASSERT_TRUE(ParseIPLiteralToNumber(tests[i].ip_address, &ip_number)); | 129 ASSERT_TRUE(ParseIPLiteralToNumber(tests[i].ip_address, &ip_number)); |
| 127 ip_list.push_back(ip_number); | 130 ip_list.push_back(ip_number); |
| 128 } | 131 } |
| 129 | 132 |
| 130 AddressList test_list = AddressList::CreateFromIPAddressList(ip_list, | 133 AddressList test_list = |
| 131 kCanonicalName); | 134 AddressList::CreateFromIPAddressList(ip_list, kCanonicalName); |
| 132 std::string canonical_name; | 135 std::string canonical_name; |
| 133 EXPECT_EQ(kCanonicalName, test_list.canonical_name()); | 136 EXPECT_EQ(kCanonicalName, test_list.canonical_name()); |
| 134 EXPECT_EQ(ARRAYSIZE_UNSAFE(tests), test_list.size()); | 137 EXPECT_EQ(ARRAYSIZE_UNSAFE(tests), test_list.size()); |
| 135 } | 138 } |
| 136 | 139 |
| 137 } // namespace | 140 } // namespace |
| 138 } // namespace net | 141 } // namespace net |
| OLD | NEW |