| 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/net_util.h" | 5 #include "net/base/net_util.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 const base::string16 www(base::ASCIIToUTF16("www.")); | 260 const base::string16 www(base::ASCIIToUTF16("www.")); |
| 261 return StartsWith(text, www, true) ? text.substr(www.length()) : text; | 261 return StartsWith(text, www, true) ? text.substr(www.length()) : text; |
| 262 } | 262 } |
| 263 | 263 |
| 264 base::string16 StripWWWFromHost(const GURL& url) { | 264 base::string16 StripWWWFromHost(const GURL& url) { |
| 265 DCHECK(url.is_valid()); | 265 DCHECK(url.is_valid()); |
| 266 return StripWWW(base::ASCIIToUTF16(url.host())); | 266 return StripWWW(base::ASCIIToUTF16(url.host())); |
| 267 } | 267 } |
| 268 | 268 |
| 269 bool IsPortValid(int port) { | 269 bool IsPortValid(int port) { |
| 270 return port >= 0 && port <= std::numeric_limits<uint16>::max(); | 270 return port >= 0 && port <= std::numeric_limits<uint16_t>::max(); |
| 271 } | 271 } |
| 272 | 272 |
| 273 bool IsPortAllowedByDefault(int port) { | 273 bool IsPortAllowedByDefault(int port) { |
| 274 int array_size = arraysize(kRestrictedPorts); | 274 int array_size = arraysize(kRestrictedPorts); |
| 275 for (int i = 0; i < array_size; i++) { | 275 for (int i = 0; i < array_size; i++) { |
| 276 if (kRestrictedPorts[i] == port) { | 276 if (kRestrictedPorts[i] == port) { |
| 277 return false; | 277 return false; |
| 278 } | 278 } |
| 279 } | 279 } |
| 280 return IsPortValid(port); | 280 return IsPortValid(port); |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 | 450 |
| 451 void SockaddrStorage::operator=(const SockaddrStorage& other) { | 451 void SockaddrStorage::operator=(const SockaddrStorage& other) { |
| 452 addr_len = other.addr_len; | 452 addr_len = other.addr_len; |
| 453 // addr is already set to &this->addr_storage by default ctor. | 453 // addr is already set to &this->addr_storage by default ctor. |
| 454 memcpy(addr, other.addr, addr_len); | 454 memcpy(addr, other.addr, addr_len); |
| 455 } | 455 } |
| 456 | 456 |
| 457 // Extracts the address and port portions of a sockaddr. | 457 // Extracts the address and port portions of a sockaddr. |
| 458 bool GetIPAddressFromSockAddr(const struct sockaddr* sock_addr, | 458 bool GetIPAddressFromSockAddr(const struct sockaddr* sock_addr, |
| 459 socklen_t sock_addr_len, | 459 socklen_t sock_addr_len, |
| 460 const uint8** address, | 460 const uint8_t** address, |
| 461 size_t* address_len, | 461 size_t* address_len, |
| 462 uint16* port) { | 462 uint16_t* port) { |
| 463 if (sock_addr->sa_family == AF_INET) { | 463 if (sock_addr->sa_family == AF_INET) { |
| 464 if (sock_addr_len < static_cast<socklen_t>(sizeof(struct sockaddr_in))) | 464 if (sock_addr_len < static_cast<socklen_t>(sizeof(struct sockaddr_in))) |
| 465 return false; | 465 return false; |
| 466 const struct sockaddr_in* addr = | 466 const struct sockaddr_in* addr = |
| 467 reinterpret_cast<const struct sockaddr_in*>(sock_addr); | 467 reinterpret_cast<const struct sockaddr_in*>(sock_addr); |
| 468 *address = reinterpret_cast<const uint8*>(&addr->sin_addr); | 468 *address = reinterpret_cast<const uint8_t*>(&addr->sin_addr); |
| 469 *address_len = kIPv4AddressSize; | 469 *address_len = kIPv4AddressSize; |
| 470 if (port) | 470 if (port) |
| 471 *port = base::NetToHost16(addr->sin_port); | 471 *port = base::NetToHost16(addr->sin_port); |
| 472 return true; | 472 return true; |
| 473 } | 473 } |
| 474 | 474 |
| 475 if (sock_addr->sa_family == AF_INET6) { | 475 if (sock_addr->sa_family == AF_INET6) { |
| 476 if (sock_addr_len < static_cast<socklen_t>(sizeof(struct sockaddr_in6))) | 476 if (sock_addr_len < static_cast<socklen_t>(sizeof(struct sockaddr_in6))) |
| 477 return false; | 477 return false; |
| 478 const struct sockaddr_in6* addr = | 478 const struct sockaddr_in6* addr = |
| 479 reinterpret_cast<const struct sockaddr_in6*>(sock_addr); | 479 reinterpret_cast<const struct sockaddr_in6*>(sock_addr); |
| 480 *address = reinterpret_cast<const uint8*>(&addr->sin6_addr); | 480 *address = reinterpret_cast<const uint8_t*>(&addr->sin6_addr); |
| 481 *address_len = kIPv6AddressSize; | 481 *address_len = kIPv6AddressSize; |
| 482 if (port) | 482 if (port) |
| 483 *port = base::NetToHost16(addr->sin6_port); | 483 *port = base::NetToHost16(addr->sin6_port); |
| 484 return true; | 484 return true; |
| 485 } | 485 } |
| 486 | 486 |
| 487 #if defined(OS_WIN) | 487 #if defined(OS_WIN) |
| 488 if (sock_addr->sa_family == AF_BTH) { | 488 if (sock_addr->sa_family == AF_BTH) { |
| 489 if (sock_addr_len < static_cast<socklen_t>(sizeof(SOCKADDR_BTH))) | 489 if (sock_addr_len < static_cast<socklen_t>(sizeof(SOCKADDR_BTH))) |
| 490 return false; | 490 return false; |
| 491 const SOCKADDR_BTH* addr = | 491 const SOCKADDR_BTH* addr = |
| 492 reinterpret_cast<const SOCKADDR_BTH*>(sock_addr); | 492 reinterpret_cast<const SOCKADDR_BTH*>(sock_addr); |
| 493 *address = reinterpret_cast<const uint8*>(&addr->btAddr); | 493 *address = reinterpret_cast<const uint8_t*>(&addr->btAddr); |
| 494 *address_len = kBluetoothAddressSize; | 494 *address_len = kBluetoothAddressSize; |
| 495 if (port) | 495 if (port) |
| 496 *port = static_cast<uint16>(addr->port); | 496 *port = static_cast<uint16_t>(addr->port); |
| 497 return true; | 497 return true; |
| 498 } | 498 } |
| 499 #endif | 499 #endif |
| 500 | 500 |
| 501 return false; // Unrecognized |sa_family|. | 501 return false; // Unrecognized |sa_family|. |
| 502 } | 502 } |
| 503 | 503 |
| 504 std::string NetAddressToString(const struct sockaddr* sa, | 504 std::string NetAddressToString(const struct sockaddr* sa, |
| 505 socklen_t sock_addr_len) { | 505 socklen_t sock_addr_len) { |
| 506 const uint8* address; | 506 const uint8_t* address; |
| 507 size_t address_len; | 507 size_t address_len; |
| 508 if (!GetIPAddressFromSockAddr(sa, sock_addr_len, &address, | 508 if (!GetIPAddressFromSockAddr(sa, sock_addr_len, &address, |
| 509 &address_len, NULL)) { | 509 &address_len, NULL)) { |
| 510 NOTREACHED(); | 510 NOTREACHED(); |
| 511 return std::string(); | 511 return std::string(); |
| 512 } | 512 } |
| 513 return IPAddressToString(address, address_len); | 513 return IPAddressToString(address, address_len); |
| 514 } | 514 } |
| 515 | 515 |
| 516 std::string NetAddressToStringWithPort(const struct sockaddr* sa, | 516 std::string NetAddressToStringWithPort(const struct sockaddr* sa, |
| 517 socklen_t sock_addr_len) { | 517 socklen_t sock_addr_len) { |
| 518 const uint8* address; | 518 const uint8_t* address; |
| 519 size_t address_len; | 519 size_t address_len; |
| 520 uint16 port; | 520 uint16_t port; |
| 521 if (!GetIPAddressFromSockAddr(sa, sock_addr_len, &address, | 521 if (!GetIPAddressFromSockAddr(sa, sock_addr_len, &address, |
| 522 &address_len, &port)) { | 522 &address_len, &port)) { |
| 523 NOTREACHED(); | 523 NOTREACHED(); |
| 524 return std::string(); | 524 return std::string(); |
| 525 } | 525 } |
| 526 return IPAddressToStringWithPort(address, address_len, port); | 526 return IPAddressToStringWithPort(address, address_len, port); |
| 527 } | 527 } |
| 528 | 528 |
| 529 std::string GetHostName() { | 529 std::string GetHostName() { |
| 530 #if defined(OS_NACL) | 530 #if defined(OS_NACL) |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 return AF_UNSPEC; | 689 return AF_UNSPEC; |
| 690 case ADDRESS_FAMILY_IPV4: | 690 case ADDRESS_FAMILY_IPV4: |
| 691 return AF_INET; | 691 return AF_INET; |
| 692 case ADDRESS_FAMILY_IPV6: | 692 case ADDRESS_FAMILY_IPV6: |
| 693 return AF_INET6; | 693 return AF_INET6; |
| 694 } | 694 } |
| 695 NOTREACHED(); | 695 NOTREACHED(); |
| 696 return AF_UNSPEC; | 696 return AF_UNSPEC; |
| 697 } | 697 } |
| 698 | 698 |
| 699 const uint16* GetPortFieldFromSockaddr(const struct sockaddr* address, | 699 const uint16_t* GetPortFieldFromSockaddr(const struct sockaddr* address, |
| 700 socklen_t address_len) { | 700 socklen_t address_len) { |
| 701 if (address->sa_family == AF_INET) { | 701 if (address->sa_family == AF_INET) { |
| 702 DCHECK_LE(sizeof(sockaddr_in), static_cast<size_t>(address_len)); | 702 DCHECK_LE(sizeof(sockaddr_in), static_cast<size_t>(address_len)); |
| 703 const struct sockaddr_in* sockaddr = | 703 const struct sockaddr_in* sockaddr = |
| 704 reinterpret_cast<const struct sockaddr_in*>(address); | 704 reinterpret_cast<const struct sockaddr_in*>(address); |
| 705 return &sockaddr->sin_port; | 705 return &sockaddr->sin_port; |
| 706 } else if (address->sa_family == AF_INET6) { | 706 } else if (address->sa_family == AF_INET6) { |
| 707 DCHECK_LE(sizeof(sockaddr_in6), static_cast<size_t>(address_len)); | 707 DCHECK_LE(sizeof(sockaddr_in6), static_cast<size_t>(address_len)); |
| 708 const struct sockaddr_in6* sockaddr = | 708 const struct sockaddr_in6* sockaddr = |
| 709 reinterpret_cast<const struct sockaddr_in6*>(address); | 709 reinterpret_cast<const struct sockaddr_in6*>(address); |
| 710 return &sockaddr->sin6_port; | 710 return &sockaddr->sin6_port; |
| 711 } else { | 711 } else { |
| 712 NOTREACHED(); | 712 NOTREACHED(); |
| 713 return NULL; | 713 return NULL; |
| 714 } | 714 } |
| 715 } | 715 } |
| 716 | 716 |
| 717 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { | 717 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { |
| 718 const uint16* port_field = GetPortFieldFromSockaddr(address, address_len); | 718 const uint16_t* port_field = GetPortFieldFromSockaddr(address, address_len); |
| 719 if (!port_field) | 719 if (!port_field) |
| 720 return -1; | 720 return -1; |
| 721 return base::NetToHost16(*port_field); | 721 return base::NetToHost16(*port_field); |
| 722 } | 722 } |
| 723 | 723 |
| 724 bool IsLocalhost(const std::string& host) { | 724 bool IsLocalhost(const std::string& host) { |
| 725 if (host == "localhost" || host == "localhost.localdomain" || | 725 if (host == "localhost" || host == "localhost.localdomain" || |
| 726 host == "localhost6" || host == "localhost6.localdomain6" || | 726 host == "localhost6" || host == "localhost6.localdomain6" || |
| 727 IsLocalhostTLD(host)) | 727 IsLocalhostTLD(host)) |
| 728 return true; | 728 return true; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 }; | 789 }; |
| 790 const std::string& host = url.host(); | 790 const std::string& host = url.host(); |
| 791 for (const char* suffix : kGoogleHostSuffixes) { | 791 for (const char* suffix : kGoogleHostSuffixes) { |
| 792 if (EndsWith(host, suffix, false)) | 792 if (EndsWith(host, suffix, false)) |
| 793 return true; | 793 return true; |
| 794 } | 794 } |
| 795 return false; | 795 return false; |
| 796 } | 796 } |
| 797 | 797 |
| 798 } // namespace net | 798 } // namespace net |
| OLD | NEW |