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

Side by Side Diff: webrtc/base/ipaddress.cc

Issue 1362503003: Use suffixed {uint,int}{8,16,32,64}_t types. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase + revert basictypes.h (to be landed separately just in case of a revert due to unexpected us… Created 5 years, 2 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
« no previous file with comments | « webrtc/base/ipaddress.h ('k') | webrtc/base/logging.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 25 matching lines...) Expand all
36 // Prefixes used for categorizing IPv6 addresses. 36 // Prefixes used for categorizing IPv6 addresses.
37 static const in6_addr kV4MappedPrefix = {{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37 static const in6_addr kV4MappedPrefix = {{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 0xFF, 0xFF, 0}}}; 38 0xFF, 0xFF, 0}}};
39 static const in6_addr k6To4Prefix = {{{0x20, 0x02, 0}}}; 39 static const in6_addr k6To4Prefix = {{{0x20, 0x02, 0}}};
40 static const in6_addr kTeredoPrefix = {{{0x20, 0x01, 0x00, 0x00}}}; 40 static const in6_addr kTeredoPrefix = {{{0x20, 0x01, 0x00, 0x00}}};
41 static const in6_addr kV4CompatibilityPrefix = {{{0}}}; 41 static const in6_addr kV4CompatibilityPrefix = {{{0}}};
42 static const in6_addr k6BonePrefix = {{{0x3f, 0xfe, 0}}}; 42 static const in6_addr k6BonePrefix = {{{0x3f, 0xfe, 0}}};
43 43
44 bool IPAddress::strip_sensitive_ = false; 44 bool IPAddress::strip_sensitive_ = false;
45 45
46 static bool IsPrivateV4(uint32 ip); 46 static bool IsPrivateV4(uint32_t ip);
47 static in_addr ExtractMappedAddress(const in6_addr& addr); 47 static in_addr ExtractMappedAddress(const in6_addr& addr);
48 48
49 uint32 IPAddress::v4AddressAsHostOrderInteger() const { 49 uint32_t IPAddress::v4AddressAsHostOrderInteger() const {
50 if (family_ == AF_INET) { 50 if (family_ == AF_INET) {
51 return NetworkToHost32(u_.ip4.s_addr); 51 return NetworkToHost32(u_.ip4.s_addr);
52 } else { 52 } else {
53 return 0; 53 return 0;
54 } 54 }
55 } 55 }
56 56
57 bool IPAddress::IsNil() const { 57 bool IPAddress::IsNil() const {
58 return IPIsUnspec(*this); 58 return IPIsUnspec(*this);
59 } 59 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 208
209 std::ostream& operator<<(std::ostream& os, const InterfaceAddress& ip) { 209 std::ostream& operator<<(std::ostream& os, const InterfaceAddress& ip) {
210 os << static_cast<const IPAddress&>(ip); 210 os << static_cast<const IPAddress&>(ip);
211 211
212 if (ip.family() == AF_INET6) 212 if (ip.family() == AF_INET6)
213 os << "|flags:0x" << std::hex << ip.ipv6_flags(); 213 os << "|flags:0x" << std::hex << ip.ipv6_flags();
214 214
215 return os; 215 return os;
216 } 216 }
217 217
218 bool IsPrivateV4(uint32 ip_in_host_order) { 218 bool IsPrivateV4(uint32_t ip_in_host_order) {
219 return ((ip_in_host_order >> 24) == 127) || 219 return ((ip_in_host_order >> 24) == 127) ||
220 ((ip_in_host_order >> 24) == 10) || 220 ((ip_in_host_order >> 24) == 10) ||
221 ((ip_in_host_order >> 20) == ((172 << 4) | 1)) || 221 ((ip_in_host_order >> 20) == ((172 << 4) | 1)) ||
222 ((ip_in_host_order >> 16) == ((192 << 8) | 168)) || 222 ((ip_in_host_order >> 16) == ((192 << 8) | 168)) ||
223 ((ip_in_host_order >> 16) == ((169 << 8) | 254)); 223 ((ip_in_host_order >> 16) == ((169 << 8) | 254));
224 } 224 }
225 225
226 in_addr ExtractMappedAddress(const in6_addr& in6) { 226 in_addr ExtractMappedAddress(const in6_addr& in6) {
227 in_addr ipv4; 227 in_addr ipv4;
228 ::memcpy(&ipv4.s_addr, &in6.s6_addr[12], sizeof(ipv4.s_addr)); 228 ::memcpy(&ipv4.s_addr, &in6.s6_addr[12], sizeof(ipv4.s_addr));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 return ip.family() == AF_UNSPEC; 314 return ip.family() == AF_UNSPEC;
315 } 315 }
316 316
317 size_t HashIP(const IPAddress& ip) { 317 size_t HashIP(const IPAddress& ip) {
318 switch (ip.family()) { 318 switch (ip.family()) {
319 case AF_INET: { 319 case AF_INET: {
320 return ip.ipv4_address().s_addr; 320 return ip.ipv4_address().s_addr;
321 } 321 }
322 case AF_INET6: { 322 case AF_INET6: {
323 in6_addr v6addr = ip.ipv6_address(); 323 in6_addr v6addr = ip.ipv6_address();
324 const uint32* v6_as_ints = 324 const uint32_t* v6_as_ints =
325 reinterpret_cast<const uint32*>(&v6addr.s6_addr); 325 reinterpret_cast<const uint32_t*>(&v6addr.s6_addr);
326 return v6_as_ints[0] ^ v6_as_ints[1] ^ v6_as_ints[2] ^ v6_as_ints[3]; 326 return v6_as_ints[0] ^ v6_as_ints[1] ^ v6_as_ints[2] ^ v6_as_ints[3];
327 } 327 }
328 } 328 }
329 return 0; 329 return 0;
330 } 330 }
331 331
332 IPAddress TruncateIP(const IPAddress& ip, int length) { 332 IPAddress TruncateIP(const IPAddress& ip, int length) {
333 if (length < 0) { 333 if (length < 0) {
334 return IPAddress(); 334 return IPAddress();
335 } 335 }
336 if (ip.family() == AF_INET) { 336 if (ip.family() == AF_INET) {
337 if (length > 31) { 337 if (length > 31) {
338 return ip; 338 return ip;
339 } 339 }
340 if (length == 0) { 340 if (length == 0) {
341 return IPAddress(INADDR_ANY); 341 return IPAddress(INADDR_ANY);
342 } 342 }
343 int mask = (0xFFFFFFFF << (32 - length)); 343 int mask = (0xFFFFFFFF << (32 - length));
344 uint32 host_order_ip = NetworkToHost32(ip.ipv4_address().s_addr); 344 uint32_t host_order_ip = NetworkToHost32(ip.ipv4_address().s_addr);
345 in_addr masked; 345 in_addr masked;
346 masked.s_addr = HostToNetwork32(host_order_ip & mask); 346 masked.s_addr = HostToNetwork32(host_order_ip & mask);
347 return IPAddress(masked); 347 return IPAddress(masked);
348 } else if (ip.family() == AF_INET6) { 348 } else if (ip.family() == AF_INET6) {
349 if (length > 127) { 349 if (length > 127) {
350 return ip; 350 return ip;
351 } 351 }
352 if (length == 0) { 352 if (length == 0) {
353 return IPAddress(in6addr_any); 353 return IPAddress(in6addr_any);
354 } 354 }
355 in6_addr v6addr = ip.ipv6_address(); 355 in6_addr v6addr = ip.ipv6_address();
356 int position = length / 32; 356 int position = length / 32;
357 int inner_length = 32 - (length - (position * 32)); 357 int inner_length = 32 - (length - (position * 32));
358 // Note: 64bit mask constant needed to allow possible 32-bit left shift. 358 // Note: 64bit mask constant needed to allow possible 32-bit left shift.
359 uint32 inner_mask = 0xFFFFFFFFLL << inner_length; 359 uint32_t inner_mask = 0xFFFFFFFFLL << inner_length;
360 uint32* v6_as_ints = 360 uint32_t* v6_as_ints = reinterpret_cast<uint32_t*>(&v6addr.s6_addr);
361 reinterpret_cast<uint32*>(&v6addr.s6_addr);
362 for (int i = 0; i < 4; ++i) { 361 for (int i = 0; i < 4; ++i) {
363 if (i == position) { 362 if (i == position) {
364 uint32 host_order_inner = NetworkToHost32(v6_as_ints[i]); 363 uint32_t host_order_inner = NetworkToHost32(v6_as_ints[i]);
365 v6_as_ints[i] = HostToNetwork32(host_order_inner & inner_mask); 364 v6_as_ints[i] = HostToNetwork32(host_order_inner & inner_mask);
366 } else if (i > position) { 365 } else if (i > position) {
367 v6_as_ints[i] = 0; 366 v6_as_ints[i] = 0;
368 } 367 }
369 } 368 }
370 return IPAddress(v6addr); 369 return IPAddress(v6addr);
371 } 370 }
372 return IPAddress(); 371 return IPAddress();
373 } 372 }
374 373
375 int CountIPMaskBits(IPAddress mask) { 374 int CountIPMaskBits(IPAddress mask) {
376 uint32 word_to_count = 0; 375 uint32_t word_to_count = 0;
377 int bits = 0; 376 int bits = 0;
378 switch (mask.family()) { 377 switch (mask.family()) {
379 case AF_INET: { 378 case AF_INET: {
380 word_to_count = NetworkToHost32(mask.ipv4_address().s_addr); 379 word_to_count = NetworkToHost32(mask.ipv4_address().s_addr);
381 break; 380 break;
382 } 381 }
383 case AF_INET6: { 382 case AF_INET6: {
384 in6_addr v6addr = mask.ipv6_address(); 383 in6_addr v6addr = mask.ipv6_address();
385 const uint32* v6_as_ints = 384 const uint32_t* v6_as_ints =
386 reinterpret_cast<const uint32*>(&v6addr.s6_addr); 385 reinterpret_cast<const uint32_t*>(&v6addr.s6_addr);
387 int i = 0; 386 int i = 0;
388 for (; i < 4; ++i) { 387 for (; i < 4; ++i) {
389 if (v6_as_ints[i] != 0xFFFFFFFF) { 388 if (v6_as_ints[i] != 0xFFFFFFFF) {
390 break; 389 break;
391 } 390 }
392 } 391 }
393 if (i < 4) { 392 if (i < 4) {
394 word_to_count = NetworkToHost32(v6_as_ints[i]); 393 word_to_count = NetworkToHost32(v6_as_ints[i]);
395 } 394 }
396 bits = (i * 32); 395 bits = (i * 32);
397 break; 396 break;
398 } 397 }
399 default: { 398 default: {
400 return 0; 399 return 0;
401 } 400 }
402 } 401 }
403 if (word_to_count == 0) { 402 if (word_to_count == 0) {
404 return bits; 403 return bits;
405 } 404 }
406 405
407 // Public domain bit-twiddling hack from: 406 // Public domain bit-twiddling hack from:
408 // http://graphics.stanford.edu/~seander/bithacks.html 407 // http://graphics.stanford.edu/~seander/bithacks.html
409 // Counts the trailing 0s in the word. 408 // Counts the trailing 0s in the word.
410 unsigned int zeroes = 32; 409 unsigned int zeroes = 32;
411 word_to_count &= -static_cast<int32>(word_to_count); 410 word_to_count &= -static_cast<int32_t>(word_to_count);
412 if (word_to_count) zeroes--; 411 if (word_to_count) zeroes--;
413 if (word_to_count & 0x0000FFFF) zeroes -= 16; 412 if (word_to_count & 0x0000FFFF) zeroes -= 16;
414 if (word_to_count & 0x00FF00FF) zeroes -= 8; 413 if (word_to_count & 0x00FF00FF) zeroes -= 8;
415 if (word_to_count & 0x0F0F0F0F) zeroes -= 4; 414 if (word_to_count & 0x0F0F0F0F) zeroes -= 4;
416 if (word_to_count & 0x33333333) zeroes -= 2; 415 if (word_to_count & 0x33333333) zeroes -= 2;
417 if (word_to_count & 0x55555555) zeroes -= 1; 416 if (word_to_count & 0x55555555) zeroes -= 1;
418 417
419 return bits + (32 - zeroes); 418 return bits + (32 - zeroes);
420 } 419 }
421 420
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 IPAddress GetLoopbackIP(int family) { 500 IPAddress GetLoopbackIP(int family) {
502 if (family == AF_INET) { 501 if (family == AF_INET) {
503 return rtc::IPAddress(INADDR_LOOPBACK); 502 return rtc::IPAddress(INADDR_LOOPBACK);
504 } 503 }
505 if (family == AF_INET6) { 504 if (family == AF_INET6) {
506 return rtc::IPAddress(in6addr_loopback); 505 return rtc::IPAddress(in6addr_loopback);
507 } 506 }
508 return rtc::IPAddress(); 507 return rtc::IPAddress();
509 } 508 }
510 } // Namespace rtc 509 } // Namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/ipaddress.h ('k') | webrtc/base/logging.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698