| Index: talk/app/webrtc/webrtcsession.cc
|
| diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc
|
| index 2533328968945e4c2c67a2694e95ae8d19c288ea..29b3a8a51b0cef9081d99a81ee650099a89e2d95 100644
|
| --- a/talk/app/webrtc/webrtcsession.cc
|
| +++ b/talk/app/webrtc/webrtcsession.cc
|
| @@ -57,6 +57,12 @@ using cricket::MediaContentDescription;
|
| using cricket::SessionDescription;
|
| using cricket::TransportInfo;
|
|
|
| +using cricket::LOCAL_PORT_TYPE;
|
| +using cricket::STUN_PORT_TYPE;
|
| +using cricket::RELAY_PORT_TYPE;
|
| +using cricket::PRFLX_PORT_TYPE;
|
| +using webrtc::IceEndpointType;
|
| +
|
| namespace webrtc {
|
|
|
| // Error messages
|
| @@ -83,6 +89,32 @@ const char kDtlsSetupFailureRtcp[] =
|
| "Couldn't set up DTLS-SRTP on RTCP channel.";
|
| const int kMaxUnsignalledRecvStreams = 20;
|
|
|
| +#define DECLARE_ENDPOINT_TYPE_ENTRY(local_type, remote_type, endpoint_type) \
|
| + if (local.type() == local_type##_PORT_TYPE && \
|
| + remote.type() == remote_type##_PORT_TYPE) { \
|
| + return endpoint_type; \
|
| + }
|
| +
|
| +IceEndpointType GetIceEndpointType(const cricket::Candidate& local,
|
| + const cricket::Candidate& remote) {
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(LOCAL, LOCAL, kIceEndpoint_Host_Host);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(LOCAL, STUN, kIceEndpoint_Host_Srflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(LOCAL, RELAY, kIceEndpoint_Host_Relay);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(LOCAL, PRFLX, kIceEndpoint_Host_Prflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(STUN, LOCAL, kIceEndpoint_Srflx_Host);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(STUN, STUN, kIceEndpoint_Srflx_Srflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(STUN, RELAY, kIceEndpoint_Srflx_Relay);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(STUN, PRFLX, kIceEndpoint_Srflx_Prflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(RELAY, LOCAL, kIceEndpoint_Relay_Host);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(RELAY, STUN, kIceEndpoint_Relay_Srflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(RELAY, RELAY, kIceEndpoint_Relay_Relay);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(RELAY, PRFLX, kIceEndpoint_Relay_Prflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(PRFLX, LOCAL, kIceEndpoint_Prflx_Host);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(PRFLX, STUN, kIceEndpoint_Prflx_Srflx);
|
| + DECLARE_ENDPOINT_TYPE_ENTRY(PRFLX, RELAY, kIceEndpoint_Prflx_Relay);
|
| + return kIceEndpoint_Max;
|
| +}
|
| +
|
| // Compares |answer| against |offer|. Comparision is done
|
| // for number of m-lines in answer against offer. If matches true will be
|
| // returned otherwise false.
|
| @@ -1916,6 +1948,23 @@ void WebRtcSession::ReportBestConnectionState(
|
| if (!it_info->best_connection) {
|
| continue;
|
| }
|
| +
|
| + // Get the PeerConnectionEnumCounterType.
|
| + PeerConnectionEnumCounterType counter = kPeerConnectionEnumCounter_Max;
|
| + if (it_info->local_candidate.first_hop_protocol() ==
|
| + cricket::UDP_PROTOCOL_NAME) {
|
| + counter = kPeerConnectionEnumCounter_IceEndpointTypeUDP;
|
| + } else if (it_info->local_candidate.first_hop_protocol() ==
|
| + cricket::TCP_PROTOCOL_NAME) {
|
| + counter = kPeerConnectionEnumCounter_IceEndpointTypeTCP;
|
| + } else {
|
| + DCHECK(counter != kPeerConnectionEnumCounter_Max);
|
| + }
|
| +
|
| + metrics_observer_->IncrementEnumCounter(
|
| + counter, GetIceEndpointType(it_info->local_candidate,
|
| + it_info->remote_candidate),
|
| + kIceEndpoint_Max);
|
| if (it_info->local_candidate.address().family() == AF_INET) {
|
| metrics_observer_->IncrementCounter(kBestConnections_IPv4);
|
| } else if (it_info->local_candidate.address().family() ==
|
|
|