diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-16 03:14:42 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-16 03:14:42 +0000 |
commit | d1388f48fc5971d3bddeca6dd6c0c44f63552063 (patch) | |
tree | 8677600788ea2ae558e2cf7c2a18b11b085e9061 /net/base/net_util.cc | |
parent | 0738a30690b8992c412ac968816e1ea8479577d8 (diff) | |
download | chromium_src-d1388f48fc5971d3bddeca6dd6c0c44f63552063.zip chromium_src-d1388f48fc5971d3bddeca6dd6c0c44f63552063.tar.gz chromium_src-d1388f48fc5971d3bddeca6dd6c0c44f63552063.tar.bz2 |
In addition to the logging the IP address that a TCP connect is made to, also include the port number.
This helps when debugging situations where the port has been changed.
Review URL: http://codereview.chromium.org/2808008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49893 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/net_util.cc')
-rw-r--r-- | net/base/net_util.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/net/base/net_util.cc b/net/base/net_util.cc index 5eb2e68..946b7ff7 100644 --- a/net/base/net_util.cc +++ b/net/base/net_util.cc @@ -1294,6 +1294,21 @@ std::string NetAddressToString(const struct addrinfo* net_address) { return std::string(buffer); } +std::string NetAddressToStringWithPort(const struct addrinfo* net_address) { + std::string ip_address_string = NetAddressToString(net_address); + if (ip_address_string.empty()) + return std::string(); // Failed. + + int port = GetPortFromAddrinfo(net_address); + + if (ip_address_string.find(':') != std::string::npos) { + // Surround with square brackets to avoid ambiguity. + return StringPrintf("[%s]:%d", ip_address_string.c_str(), port); + } + + return StringPrintf("%s:%d", ip_address_string.c_str(), port); +} + std::string GetHostName() { #if defined(OS_WIN) EnsureWinsockInit(); @@ -1882,4 +1897,30 @@ bool IPNumberMatchesPrefix(const IPAddressNumber& ip_number, return true; } +// Returns the port field of the sockaddr in |info|. +uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info) { + DCHECK(info); + if (info->ai_family == AF_INET) { + DCHECK_EQ(sizeof(sockaddr_in), info->ai_addrlen); + struct sockaddr_in* sockaddr = + reinterpret_cast<struct sockaddr_in*>(info->ai_addr); + return &sockaddr->sin_port; + } else if (info->ai_family == AF_INET6) { + DCHECK_EQ(sizeof(sockaddr_in6), info->ai_addrlen); + struct sockaddr_in6* sockaddr = + reinterpret_cast<struct sockaddr_in6*>(info->ai_addr); + return &sockaddr->sin6_port; + } else { + NOTREACHED(); + return NULL; + } +} + +int GetPortFromAddrinfo(const struct addrinfo* info) { + uint16* port_field = GetPortFieldFromAddrinfo(info); + if (!port_field) + return -1; + return ntohs(*port_field); +} + } // namespace net |