summaryrefslogtreecommitdiffstats
path: root/net/base/net_util.cc
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-16 03:14:42 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-16 03:14:42 +0000
commitd1388f48fc5971d3bddeca6dd6c0c44f63552063 (patch)
tree8677600788ea2ae558e2cf7c2a18b11b085e9061 /net/base/net_util.cc
parent0738a30690b8992c412ac968816e1ea8479577d8 (diff)
downloadchromium_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.cc41
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