summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-26 04:13:59 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-26 04:13:59 +0000
commit93e7901867cfa9264d743b891027ab1a48ed4547 (patch)
tree81fda20a5a260f7fcccee6a2652ffd4587ae52b0 /net/base
parent9727a106bea991601ceba5bb63247a1e1080d348 (diff)
downloadchromium_src-93e7901867cfa9264d743b891027ab1a48ed4547.zip
chromium_src-93e7901867cfa9264d743b891027ab1a48ed4547.tar.gz
chromium_src-93e7901867cfa9264d743b891027ab1a48ed4547.tar.bz2
Log source ip and port in NetLog.
This will make it easier to identify specific TCP connections in a wireshark trace. BUG=70649 TEST=Connect somewhere, check about:net-internals to see that source ip and port are logged. Review URL: http://codereview.chromium.org/6394004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72607 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r--net/base/net_util.cc70
-rw-r--r--net/base/net_util.h18
2 files changed, 66 insertions, 22 deletions
diff --git a/net/base/net_util.cc b/net/base/net_util.cc
index fff02a9..8188c92 100644
--- a/net/base/net_util.cc
+++ b/net/base/net_util.cc
@@ -4,8 +4,6 @@
#include "net/base/net_util.h"
-#include <algorithm>
-#include <map>
#include <unicode/regex.h>
#include <unicode/ucnv.h>
#include <unicode/uidna.h>
@@ -13,13 +11,14 @@
#include <unicode/uniset.h>
#include <unicode/uscript.h>
#include <unicode/uset.h>
+#include <algorithm>
+#include <map>
#include "build/build_config.h"
#if defined(OS_WIN)
#include <windows.h>
#include <winsock2.h>
-#include <ws2tcpip.h>
#include <wspiapi.h> // Needed for Win2k compat.
#elif defined(OS_POSIX)
#include <fcntl.h>
@@ -27,7 +26,6 @@
#include <netdb.h>
#include <net/if.h>
#include <netinet/in.h>
-#include <sys/socket.h>
#endif
#include "base/base64.h"
@@ -1579,6 +1577,11 @@ std::string GetHostAndOptionalPort(const GURL& url) {
}
std::string NetAddressToString(const struct addrinfo* net_address) {
+ return NetAddressToString(net_address->ai_addr, net_address->ai_addrlen);
+}
+
+std::string NetAddressToString(const struct sockaddr* net_address,
+ socklen_t address_len) {
#if defined(OS_WIN)
EnsureWinsockInit();
#endif
@@ -1586,22 +1589,28 @@ std::string NetAddressToString(const struct addrinfo* net_address) {
// This buffer is large enough to fit the biggest IPv6 string.
char buffer[INET6_ADDRSTRLEN];
- int result = getnameinfo(net_address->ai_addr,
- net_address->ai_addrlen, buffer, sizeof(buffer), NULL, 0, NI_NUMERICHOST);
+ int result = getnameinfo(net_address, address_len, buffer, sizeof(buffer),
+ NULL, 0, NI_NUMERICHOST);
if (result != 0) {
- DVLOG(1) << "getnameinfo() failed with " << result;
+ DVLOG(1) << "getnameinfo() failed with " << result << ": "
+ << gai_strerror(result);
buffer[0] = '\0';
}
return std::string(buffer);
}
std::string NetAddressToStringWithPort(const struct addrinfo* net_address) {
- std::string ip_address_string = NetAddressToString(net_address);
+ return NetAddressToStringWithPort(
+ net_address->ai_addr, net_address->ai_addrlen);
+}
+std::string NetAddressToStringWithPort(const struct sockaddr* net_address,
+ socklen_t address_len) {
+ std::string ip_address_string = NetAddressToString(net_address, address_len);
if (ip_address_string.empty())
return std::string(); // Failed.
- int port = GetPortFromAddrinfo(net_address);
+ int port = GetPortFromSockaddr(net_address, address_len);
if (ip_address_string.find(':') != std::string::npos) {
// Surround with square brackets to avoid ambiguity.
@@ -2039,17 +2048,38 @@ bool IPNumberMatchesPrefix(const IPAddressNumber& ip_number,
}
// Returns the port field of the sockaddr in |info|.
-uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info) {
+uint16* GetPortFieldFromAddrinfo(struct addrinfo* info) {
+ const struct addrinfo* const_info = info;
+ const uint16* port_field = GetPortFieldFromAddrinfo(const_info);
+ return const_cast<uint16*>(port_field);
+}
+
+const uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info) {
DCHECK(info);
- if (info->ai_family == AF_INET) {
- DCHECK_EQ(sizeof(sockaddr_in), static_cast<size_t>(info->ai_addrlen));
- struct sockaddr_in* sockaddr =
- reinterpret_cast<struct sockaddr_in*>(info->ai_addr);
+ const struct sockaddr* address = info->ai_addr;
+ DCHECK(address);
+ DCHECK_EQ(info->ai_family, address->sa_family);
+ return GetPortFieldFromSockaddr(address, info->ai_addrlen);
+}
+
+int GetPortFromAddrinfo(const struct addrinfo* info) {
+ const uint16* port_field = GetPortFieldFromAddrinfo(info);
+ if (!port_field)
+ return -1;
+ return ntohs(*port_field);
+}
+
+const uint16* GetPortFieldFromSockaddr(const struct sockaddr* address,
+ socklen_t address_len) {
+ if (address->sa_family == AF_INET) {
+ DCHECK_LE(sizeof(sockaddr_in), static_cast<size_t>(address_len));
+ const struct sockaddr_in* sockaddr =
+ reinterpret_cast<const struct sockaddr_in*>(address);
return &sockaddr->sin_port;
- } else if (info->ai_family == AF_INET6) {
- DCHECK_EQ(sizeof(sockaddr_in6), static_cast<size_t>(info->ai_addrlen));
- struct sockaddr_in6* sockaddr =
- reinterpret_cast<struct sockaddr_in6*>(info->ai_addr);
+ } else if (address->sa_family == AF_INET6) {
+ DCHECK_LE(sizeof(sockaddr_in6), static_cast<size_t>(address_len));
+ const struct sockaddr_in6* sockaddr =
+ reinterpret_cast<const struct sockaddr_in6*>(address);
return &sockaddr->sin6_port;
} else {
NOTREACHED();
@@ -2057,8 +2087,8 @@ uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info) {
}
}
-int GetPortFromAddrinfo(const struct addrinfo* info) {
- uint16* port_field = GetPortFieldFromAddrinfo(info);
+int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) {
+ const uint16* port_field = GetPortFieldFromSockaddr(address, address_len);
if (!port_field)
return -1;
return ntohs(*port_field);
diff --git a/net/base/net_util.h b/net/base/net_util.h
index f53ee7e..935eab6 100644
--- a/net/base/net_util.h
+++ b/net/base/net_util.h
@@ -8,8 +8,11 @@
#include "build/build_config.h"
-#ifdef OS_WIN
+#if defined(OS_WIN)
#include <windows.h>
+#include <ws2tcpip.h>
+#elif defined(OS_POSIX)
+#include <sys/socket.h>
#endif
#include <string>
@@ -107,10 +110,14 @@ std::string GetHostAndOptionalPort(const GURL& url);
// Returns the string representation of an address, like "192.168.0.1".
// Returns empty string on failure.
std::string NetAddressToString(const struct addrinfo* net_address);
+std::string NetAddressToString(const struct sockaddr* net_address,
+ socklen_t address_len);
// Same as NetAddressToString, but additionally includes the port number. For
// example: "192.168.0.1:99" or "[::1]:80".
std::string NetAddressToStringWithPort(const struct addrinfo* net_address);
+std::string NetAddressToStringWithPort(const struct sockaddr* net_address,
+ socklen_t address_len);
// Returns the hostname of the current system. Returns empty string on failure.
std::string GetHostName();
@@ -404,11 +411,18 @@ bool IPNumberMatchesPrefix(const IPAddressNumber& ip_number,
size_t prefix_length_in_bits);
// Returns the port field of the sockaddr in |info|.
-uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info);
+const uint16* GetPortFieldFromAddrinfo(const struct addrinfo* info);
+uint16* GetPortFieldFromAddrinfo(struct addrinfo* info);
// Returns the value of |info's| port (in host byte ordering).
int GetPortFromAddrinfo(const struct addrinfo* info);
+// Same except for struct sockaddr.
+const uint16* GetPortFieldFromSockaddr(const struct sockaddr* address,
+ socklen_t address_len);
+int GetPortFromSockaddr(const struct sockaddr* address,
+ socklen_t address_len);
+
} // namespace net
#endif // NET_BASE_NET_UTIL_H_