Add more IceCandidatePairType for host-host CandidatePair
This is to help to differentiate endpoints which are behind NAT or on the public internet.
BUG=520101
R=pthatcher@webrtc.org
Review URL: https://codereview.webrtc.org/1328453003 .
Cr-Commit-Position: refs/heads/master@{#9864}
diff --git a/talk/app/webrtc/umametrics.h b/talk/app/webrtc/umametrics.h
index 37e7b6d..8eaed6d 100644
--- a/talk/app/webrtc/umametrics.h
+++ b/talk/app/webrtc/umametrics.h
@@ -95,6 +95,8 @@
// type of candidate pair used when the PeerConnection first goes to a completed
// state. When BUNDLE is enabled, only the first transport gets recorded.
enum IceCandidatePairType {
+ // HostHost is deprecated. It was replaced with the set of types at the bottom
+ // to report private or public host IP address.
kIceCandidatePairHostHost,
kIceCandidatePairHostSrflx,
kIceCandidatePairHostRelay,
@@ -110,6 +112,13 @@
kIceCandidatePairPrflxHost,
kIceCandidatePairPrflxSrflx,
kIceCandidatePairPrflxRelay,
+
+ // The following 4 types tell whether local and remote hosts have private or
+ // public IP addresses.
+ kIceCandidatePairHostPrivateHostPrivate,
+ kIceCandidatePairHostPrivateHostPublic,
+ kIceCandidatePairHostPublicHostPrivate,
+ kIceCandidatePairHostPublicHostPublic,
kIceCandidatePairMax
};
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc
index 9102e78..6a761e6 100644
--- a/talk/app/webrtc/webrtcsession.cc
+++ b/talk/app/webrtc/webrtcsession.cc
@@ -97,8 +97,23 @@
const auto& srflx = STUN_PORT_TYPE;
const auto& relay = RELAY_PORT_TYPE;
const auto& prflx = PRFLX_PORT_TYPE;
- if (l == host && r == host)
- return kIceCandidatePairHostHost;
+ if (l == host && r == host) {
+ bool local_private = IPIsPrivate(local.address().ipaddr());
+ bool remote_private = IPIsPrivate(remote.address().ipaddr());
+ if (local_private) {
+ if (remote_private) {
+ return kIceCandidatePairHostPrivateHostPrivate;
+ } else {
+ return kIceCandidatePairHostPrivateHostPublic;
+ }
+ } else {
+ if (remote_private) {
+ return kIceCandidatePairHostPublicHostPrivate;
+ } else {
+ return kIceCandidatePairHostPublicHostPublic;
+ }
+ }
+ }
if (l == host && r == srflx)
return kIceCandidatePairHostSrflx;
if (l == host && r == relay)
diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc
index 0322eff..582bdc6 100644
--- a/talk/app/webrtc/webrtcsession_unittest.cc
+++ b/talk/app/webrtc/webrtcsession_unittest.cc
@@ -1043,6 +1043,10 @@
EXPECT_EQ(metrics_observer->GetEnumCounter(
webrtc::kEnumCounterIceCandidatePairTypeUdp,
webrtc::kIceCandidatePairHostHost),
+ 0);
+ EXPECT_EQ(metrics_observer->GetEnumCounter(
+ webrtc::kEnumCounterIceCandidatePairTypeUdp,
+ webrtc::kIceCandidatePairHostPublicHostPublic),
1);
}
};