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

Side by Side Diff: net/dns/address_sorter_posix.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/dns/address_sorter_posix.h" 5 #include "net/dns/address_sorter_posix.h"
6 6
7 #include <netinet/in.h> 7 #include <netinet/in.h>
8 8
9 #if defined(OS_MACOSX) || defined(OS_BSD) 9 #if defined(OS_MACOSX) || defined(OS_BSD)
10 #include <sys/socket.h> // Must be included before ifaddrs.h. 10 #include <sys/socket.h> // Must be included before ifaddrs.h.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 AddressSorterPosix::AddressScope GetIPv6MulticastScope( 75 AddressSorterPosix::AddressScope GetIPv6MulticastScope(
76 const IPAddressNumber& address) { 76 const IPAddressNumber& address) {
77 DCHECK_EQ(kIPv6AddressSize, address.size()); 77 DCHECK_EQ(kIPv6AddressSize, address.size());
78 return static_cast<AddressSorterPosix::AddressScope>(address[1] & 0x0F); 78 return static_cast<AddressSorterPosix::AddressScope>(address[1] & 0x0F);
79 } 79 }
80 80
81 bool IsIPv6Loopback(const IPAddressNumber& address) { 81 bool IsIPv6Loopback(const IPAddressNumber& address) {
82 DCHECK_EQ(kIPv6AddressSize, address.size()); 82 DCHECK_EQ(kIPv6AddressSize, address.size());
83 // IN6_IS_ADDR_LOOPBACK 83 // IN6_IS_ADDR_LOOPBACK
84 unsigned char kLoopback[kIPv6AddressSize] = { 84 unsigned char kLoopback[kIPv6AddressSize] = {
85 0, 0, 0, 0, 0, 0, 0, 0, 85 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
86 0, 0, 0, 0, 0, 0, 0, 1,
87 }; 86 };
88 return address == IPAddressNumber(kLoopback, kLoopback + kIPv6AddressSize); 87 return address == IPAddressNumber(kLoopback, kLoopback + kIPv6AddressSize);
89 } 88 }
90 89
91 bool IsIPv6LinkLocal(const IPAddressNumber& address) { 90 bool IsIPv6LinkLocal(const IPAddressNumber& address) {
92 DCHECK_EQ(kIPv6AddressSize, address.size()); 91 DCHECK_EQ(kIPv6AddressSize, address.size());
93 // IN6_IS_ADDR_LINKLOCAL 92 // IN6_IS_ADDR_LINKLOCAL
94 return (address[0] == 0xFE) && ((address[1] & 0xC0) == 0x80); 93 return (address[0] == 0xFE) && ((address[1] & 0xC0) == 0x80);
95 } 94 }
96 95
(...skipping 20 matching lines...) Expand all
117 return static_cast<AddressSorterPosix::AddressScope>( 116 return static_cast<AddressSorterPosix::AddressScope>(
118 GetPolicyValue(ipv4_scope_table, address)); 117 GetPolicyValue(ipv4_scope_table, address));
119 } else { 118 } else {
120 NOTREACHED(); 119 NOTREACHED();
121 return AddressSorterPosix::SCOPE_NODELOCAL; 120 return AddressSorterPosix::SCOPE_NODELOCAL;
122 } 121 }
123 } 122 }
124 123
125 // Default policy table. RFC 3484, Section 2.1. 124 // Default policy table. RFC 3484, Section 2.1.
126 AddressSorterPosix::PolicyEntry kDefaultPrecedenceTable[] = { 125 AddressSorterPosix::PolicyEntry kDefaultPrecedenceTable[] = {
127 // ::1/128 -- loopback 126 // ::1/128 -- loopback
128 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 128, 50 }, 127 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 128, 50},
129 // ::/0 -- any 128 // ::/0 -- any
130 { { }, 0, 40 }, 129 {{}, 0, 40},
131 // ::ffff:0:0/96 -- IPv4 mapped 130 // ::ffff:0:0/96 -- IPv4 mapped
132 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF }, 96, 35 }, 131 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF}, 96, 35},
133 // 2002::/16 -- 6to4 132 // 2002::/16 -- 6to4
134 { { 0x20, 0x02, }, 16, 30 }, 133 {{
135 // 2001::/32 -- Teredo 134 0x20, 0x02,
136 { { 0x20, 0x01, 0, 0 }, 32, 5 }, 135 },
137 // fc00::/7 -- unique local address 136 16,
138 { { 0xFC }, 7, 3 }, 137 30},
139 // ::/96 -- IPv4 compatible 138 // 2001::/32 -- Teredo
140 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 96, 1 }, 139 {{0x20, 0x01, 0, 0}, 32, 5},
141 // fec0::/10 -- site-local expanded scope 140 // fc00::/7 -- unique local address
142 { { 0xFE, 0xC0 }, 10, 1 }, 141 {{0xFC}, 7, 3},
143 // 3ffe::/16 -- 6bone 142 // ::/96 -- IPv4 compatible
144 { { 0x3F, 0xFE }, 16, 1 }, 143 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 96, 1},
144 // fec0::/10 -- site-local expanded scope
145 {{0xFE, 0xC0}, 10, 1},
146 // 3ffe::/16 -- 6bone
147 {{0x3F, 0xFE}, 16, 1},
145 }; 148 };
146 149
147 AddressSorterPosix::PolicyEntry kDefaultLabelTable[] = { 150 AddressSorterPosix::PolicyEntry kDefaultLabelTable[] = {
148 // ::1/128 -- loopback 151 // ::1/128 -- loopback
149 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 128, 0 }, 152 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 128, 0},
150 // ::/0 -- any 153 // ::/0 -- any
151 { { }, 0, 1 }, 154 {{}, 0, 1},
152 // ::ffff:0:0/96 -- IPv4 mapped 155 // ::ffff:0:0/96 -- IPv4 mapped
153 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF }, 96, 4 }, 156 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF}, 96, 4},
154 // 2002::/16 -- 6to4 157 // 2002::/16 -- 6to4
155 { { 0x20, 0x02, }, 16, 2 }, 158 {{
156 // 2001::/32 -- Teredo 159 0x20, 0x02,
157 { { 0x20, 0x01, 0, 0 }, 32, 5 }, 160 },
158 // fc00::/7 -- unique local address 161 16,
159 { { 0xFC }, 7, 13 }, 162 2},
160 // ::/96 -- IPv4 compatible 163 // 2001::/32 -- Teredo
161 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 96, 3 }, 164 {{0x20, 0x01, 0, 0}, 32, 5},
162 // fec0::/10 -- site-local expanded scope 165 // fc00::/7 -- unique local address
163 { { 0xFE, 0xC0 }, 10, 11 }, 166 {{0xFC}, 7, 13},
164 // 3ffe::/16 -- 6bone 167 // ::/96 -- IPv4 compatible
165 { { 0x3F, 0xFE }, 16, 12 }, 168 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 96, 3},
169 // fec0::/10 -- site-local expanded scope
170 {{0xFE, 0xC0}, 10, 11},
171 // 3ffe::/16 -- 6bone
172 {{0x3F, 0xFE}, 16, 12},
166 }; 173 };
167 174
168 // Default mapping of IPv4 addresses to scope. 175 // Default mapping of IPv4 addresses to scope.
169 AddressSorterPosix::PolicyEntry kDefaultIPv4ScopeTable[] = { 176 AddressSorterPosix::PolicyEntry kDefaultIPv4ScopeTable[] = {
170 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0x7F }, 104, 177 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0x7F},
171 AddressSorterPosix::SCOPE_LINKLOCAL }, 178 104,
172 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xA9, 0xFE }, 112, 179 AddressSorterPosix::SCOPE_LINKLOCAL},
173 AddressSorterPosix::SCOPE_LINKLOCAL }, 180 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xA9, 0xFE},
174 { { }, 0, AddressSorterPosix::SCOPE_GLOBAL }, 181 112,
182 AddressSorterPosix::SCOPE_LINKLOCAL},
183 {{}, 0, AddressSorterPosix::SCOPE_GLOBAL},
175 }; 184 };
176 185
177 struct DestinationInfo { 186 struct DestinationInfo {
178 IPAddressNumber address; 187 IPAddressNumber address;
179 AddressSorterPosix::AddressScope scope; 188 AddressSorterPosix::AddressScope scope;
180 unsigned precedence; 189 unsigned precedence;
181 unsigned label; 190 unsigned label;
182 const AddressSorterPosix::SourceAddressInfo* src; 191 const AddressSorterPosix::SourceAddressInfo* src;
183 unsigned common_prefix_length; 192 unsigned common_prefix_length;
184 }; 193 };
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 // stable_sort takes care of that. 243 // stable_sort takes care of that.
235 return false; 244 return false;
236 } 245 }
237 246
238 } // namespace 247 } // namespace
239 248
240 AddressSorterPosix::AddressSorterPosix(ClientSocketFactory* socket_factory) 249 AddressSorterPosix::AddressSorterPosix(ClientSocketFactory* socket_factory)
241 : socket_factory_(socket_factory), 250 : socket_factory_(socket_factory),
242 precedence_table_(LoadPolicy(kDefaultPrecedenceTable, 251 precedence_table_(LoadPolicy(kDefaultPrecedenceTable,
243 arraysize(kDefaultPrecedenceTable))), 252 arraysize(kDefaultPrecedenceTable))),
244 label_table_(LoadPolicy(kDefaultLabelTable, 253 label_table_(
245 arraysize(kDefaultLabelTable))), 254 LoadPolicy(kDefaultLabelTable, arraysize(kDefaultLabelTable))),
246 ipv4_scope_table_(LoadPolicy(kDefaultIPv4ScopeTable, 255 ipv4_scope_table_(LoadPolicy(kDefaultIPv4ScopeTable,
247 arraysize(kDefaultIPv4ScopeTable))) { 256 arraysize(kDefaultIPv4ScopeTable))) {
248 NetworkChangeNotifier::AddIPAddressObserver(this); 257 NetworkChangeNotifier::AddIPAddressObserver(this);
249 OnIPAddressChanged(); 258 OnIPAddressChanged();
250 } 259 }
251 260
252 AddressSorterPosix::~AddressSorterPosix() { 261 AddressSorterPosix::~AddressSorterPosix() {
253 NetworkChangeNotifier::RemoveIPAddressObserver(this); 262 NetworkChangeNotifier::RemoveIPAddressObserver(this);
254 } 263 }
255 264
256 void AddressSorterPosix::Sort(const AddressList& list, 265 void AddressSorterPosix::Sort(const AddressList& list,
257 const CallbackType& callback) const { 266 const CallbackType& callback) const {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 301
293 SourceAddressInfo& src_info = source_map_[src.address()]; 302 SourceAddressInfo& src_info = source_map_[src.address()];
294 if (src_info.scope == SCOPE_UNDEFINED) { 303 if (src_info.scope == SCOPE_UNDEFINED) {
295 // If |source_info_| is out of date, |src| might be missing, but we still 304 // If |source_info_| is out of date, |src| might be missing, but we still
296 // want to sort, even though the HostCache will be cleared soon. 305 // want to sort, even though the HostCache will be cleared soon.
297 FillPolicy(src.address(), &src_info); 306 FillPolicy(src.address(), &src_info);
298 } 307 }
299 info->src = &src_info; 308 info->src = &src_info;
300 309
301 if (info->address.size() == src.address().size()) { 310 if (info->address.size() == src.address().size()) {
302 info->common_prefix_length = std::min( 311 info->common_prefix_length =
303 CommonPrefixLength(info->address, src.address()), 312 std::min(CommonPrefixLength(info->address, src.address()),
304 info->src->prefix_length); 313 info->src->prefix_length);
305 } 314 }
306 sort_list.push_back(info.release()); 315 sort_list.push_back(info.release());
307 } 316 }
308 317
309 std::stable_sort(sort_list.begin(), sort_list.end(), CompareDestinations); 318 std::stable_sort(sort_list.begin(), sort_list.end(), CompareDestinations);
310 319
311 AddressList result; 320 AddressList result;
312 for (size_t i = 0; i < sort_list.size(); ++i) 321 for (size_t i = 0; i < sort_list.size(); ++i)
313 result.push_back(IPEndPoint(sort_list[i]->address, 0 /* port */)); 322 result.push_back(IPEndPoint(sort_list[i]->address, 0 /* port */));
314 323
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 info->label = GetPolicyValue(label_table_, address); 400 info->label = GetPolicyValue(label_table_, address);
392 } 401 }
393 402
394 // static 403 // static
395 scoped_ptr<AddressSorter> AddressSorter::CreateAddressSorter() { 404 scoped_ptr<AddressSorter> AddressSorter::CreateAddressSorter() {
396 return scoped_ptr<AddressSorter>( 405 return scoped_ptr<AddressSorter>(
397 new AddressSorterPosix(ClientSocketFactory::GetDefaultFactory())); 406 new AddressSorterPosix(ClientSocketFactory::GetDefaultFactory()));
398 } 407 }
399 408
400 } // namespace net 409 } // namespace net
401
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698