RTCTransportStats.dtlsState replaces .activeConnection
In accordance with recent spec change:
https://github.com/w3c/webrtc-stats/pull/122
BUG=chromium:653873, chromium:627816
Review-Url: https://codereview.webrtc.org/2625993002
Cr-Original-Commit-Position: refs/heads/master@{#16098}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 7064d5929a978aad8c3ce6cab61cef2c8c9203be
diff --git a/api/rtcstats_integrationtest.cc b/api/rtcstats_integrationtest.cc
index 69dc834..7a67038 100644
--- a/api/rtcstats_integrationtest.cc
+++ b/api/rtcstats_integrationtest.cc
@@ -572,7 +572,7 @@
verifier.TestMemberIsNonNegative<uint64_t>(transport.bytes_received);
verifier.TestMemberIsOptionalIDReference(
transport.rtcp_transport_stats_id, RTCTransportStats::kType);
- verifier.TestMemberIsDefined(transport.active_connection);
+ verifier.TestMemberIsDefined(transport.dtls_state);
verifier.TestMemberIsIDReference(
transport.selected_candidate_pair_id, RTCIceCandidatePairStats::kType);
verifier.TestMemberIsIDReference(
diff --git a/api/rtcstatscollector.cc b/api/rtcstatscollector.cc
index eade3d3..5afbb7b 100644
--- a/api/rtcstatscollector.cc
+++ b/api/rtcstatscollector.cc
@@ -132,6 +132,25 @@
}
}
+const char* DtlsTransportStateToRTCDtlsTransportState(
+ cricket::DtlsTransportState state) {
+ switch (state) {
+ case cricket::DTLS_TRANSPORT_NEW:
+ return RTCDtlsTransportState::kNew;
+ case cricket::DTLS_TRANSPORT_CONNECTING:
+ return RTCDtlsTransportState::kConnecting;
+ case cricket::DTLS_TRANSPORT_CONNECTED:
+ return RTCDtlsTransportState::kConnected;
+ case cricket::DTLS_TRANSPORT_CLOSED:
+ return RTCDtlsTransportState::kClosed;
+ case cricket::DTLS_TRANSPORT_FAILED:
+ return RTCDtlsTransportState::kFailed;
+ default:
+ RTC_NOTREACHED();
+ return nullptr;
+ }
+}
+
std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
uint64_t timestamp_us, bool inbound, bool audio,
const RtpCodecParameters& codec_params) {
@@ -926,13 +945,13 @@
timestamp_us));
transport_stats->bytes_sent = 0;
transport_stats->bytes_received = 0;
- transport_stats->active_connection = false;
+ transport_stats->dtls_state = DtlsTransportStateToRTCDtlsTransportState(
+ channel_stats.dtls_state);
for (const cricket::ConnectionInfo& info :
channel_stats.connection_infos) {
*transport_stats->bytes_sent += info.sent_total_bytes;
*transport_stats->bytes_received += info.recv_total_bytes;
if (info.best_connection) {
- transport_stats->active_connection = true;
transport_stats->selected_candidate_pair_id =
RTCIceCandidatePairStatsIDFromConnectionInfo(info);
}
diff --git a/api/rtcstatscollector_unittest.cc b/api/rtcstatscollector_unittest.cc
index 5392586..22b7ee4 100644
--- a/api/rtcstatscollector_unittest.cc
+++ b/api/rtcstatscollector_unittest.cc
@@ -1989,6 +1989,7 @@
cricket::TransportChannelStats rtp_transport_channel_stats;
rtp_transport_channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
rtp_transport_channel_stats.connection_infos.push_back(rtp_connection_info);
+ rtp_transport_channel_stats.dtls_state = cricket::DTLS_TRANSPORT_NEW;
session_stats.transport_stats["transport"].channel_stats.push_back(
rtp_transport_channel_stats);
@@ -2008,7 +2009,7 @@
report->timestamp_us());
expected_rtp_transport.bytes_sent = 42;
expected_rtp_transport.bytes_received = 1337;
- expected_rtp_transport.active_connection = false;
+ expected_rtp_transport.dtls_state = RTCDtlsTransportState::kNew;
ASSERT_TRUE(report->Get(expected_rtp_transport.id()));
EXPECT_EQ(
@@ -2025,6 +2026,7 @@
rtcp_transport_channel_stats.component =
cricket::ICE_CANDIDATE_COMPONENT_RTCP;
rtcp_transport_channel_stats.connection_infos.push_back(rtcp_connection_info);
+ rtcp_transport_channel_stats.dtls_state = cricket::DTLS_TRANSPORT_CONNECTING;
session_stats.transport_stats["transport"].channel_stats.push_back(
rtcp_transport_channel_stats);
@@ -2038,7 +2040,7 @@
report->timestamp_us());
expected_rtcp_transport.bytes_sent = 1337;
expected_rtcp_transport.bytes_received = 42;
- expected_rtcp_transport.active_connection = false;
+ expected_rtcp_transport.dtls_state = RTCDtlsTransportState::kConnecting;
expected_rtp_transport.rtcp_transport_stats_id = expected_rtcp_transport.id();
@@ -2051,7 +2053,7 @@
expected_rtcp_transport,
report->Get(expected_rtcp_transport.id())->cast_to<RTCTransportStats>());
- // Get stats with an active connection.
+ // Get stats with an active connection (selected candidate pair).
session_stats.transport_stats["transport"]
.channel_stats[1]
.connection_infos[0]
@@ -2060,7 +2062,6 @@
collector_->ClearCachedStatsReport();
report = GetStatsReport();
- expected_rtcp_transport.active_connection = true;
expected_rtcp_transport.selected_candidate_pair_id =
"RTCIceCandidatePair_" + rtcp_local_candidate->id() + "_" +
rtcp_remote_candidate->id();
diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h
index 80830c3..1f96bcd 100644
--- a/api/stats/rtcstats_objects.h
+++ b/api/stats/rtcstats_objects.h
@@ -42,6 +42,15 @@
static const char* kRelay;
};
+// https://w3c.github.io/webrtc-pc/#idl-def-rtcdtlstransportstate
+struct RTCDtlsTransportState {
+ static const char* kNew;
+ static const char* kConnecting;
+ static const char* kConnected;
+ static const char* kClosed;
+ static const char* kFailed;
+};
+
// https://w3c.github.io/webrtc-stats/#certificatestats-dict*
class RTCCertificateStats final : public RTCStats {
public:
@@ -391,7 +400,8 @@
RTCStatsMember<uint64_t> bytes_sent;
RTCStatsMember<uint64_t> bytes_received;
RTCStatsMember<std::string> rtcp_transport_stats_id;
- RTCStatsMember<bool> active_connection;
+ // TODO(hbos): Support enum types? "RTCStatsMember<RTCDtlsTransportState>"?
+ RTCStatsMember<std::string> dtls_state;
RTCStatsMember<std::string> selected_candidate_pair_id;
RTCStatsMember<std::string> local_certificate_id;
RTCStatsMember<std::string> remote_certificate_id;
diff --git a/p2p/base/jseptransport.cc b/p2p/base/jseptransport.cc
index 84e6cee..c3d6755 100644
--- a/p2p/base/jseptransport.cc
+++ b/p2p/base/jseptransport.cc
@@ -291,6 +291,7 @@
substats.component = kv.first;
channel->GetSrtpCryptoSuite(&substats.srtp_crypto_suite);
channel->GetSslCipherSuite(&substats.ssl_cipher_suite);
+ substats.dtls_state = channel->dtls_state();
if (!channel->GetStats(&substats.connection_infos)) {
return false;
}
diff --git a/p2p/base/jseptransport.h b/p2p/base/jseptransport.h
index 1cb94e0..dcf4a5f 100644
--- a/p2p/base/jseptransport.h
+++ b/p2p/base/jseptransport.h
@@ -125,6 +125,7 @@
ConnectionInfos connection_infos;
int srtp_crypto_suite = rtc::SRTP_INVALID_CRYPTO_SUITE;
int ssl_cipher_suite = rtc::TLS_NULL_WITH_NULL_NULL;
+ DtlsTransportState dtls_state = DTLS_TRANSPORT_NEW;
};
// Information about all the channels of a transport.
diff --git a/stats/rtcstats_objects.cc b/stats/rtcstats_objects.cc
index 59183ad..1b9d12a 100644
--- a/stats/rtcstats_objects.cc
+++ b/stats/rtcstats_objects.cc
@@ -29,6 +29,12 @@
const char* RTCIceCandidateType::kPrflx = "prflx";
const char* RTCIceCandidateType::kRelay = "relay";
+const char* RTCDtlsTransportState::kNew = "new";
+const char* RTCDtlsTransportState::kConnecting = "connecting";
+const char* RTCDtlsTransportState::kConnected = "connected";
+const char* RTCDtlsTransportState::kClosed = "closed";
+const char* RTCDtlsTransportState::kFailed = "failed";
+
WEBRTC_RTCSTATS_IMPL(RTCCertificateStats, RTCStats, "certificate",
&fingerprint,
&fingerprint_algorithm,
@@ -601,7 +607,7 @@
&bytes_sent,
&bytes_received,
&rtcp_transport_stats_id,
- &active_connection,
+ &dtls_state,
&selected_candidate_pair_id,
&local_certificate_id,
&remote_certificate_id);
@@ -617,7 +623,7 @@
bytes_sent("bytesSent"),
bytes_received("bytesReceived"),
rtcp_transport_stats_id("rtcpTransportStatsId"),
- active_connection("activeConnection"),
+ dtls_state("dtlsState"),
selected_candidate_pair_id("selectedCandidatePairId"),
local_certificate_id("localCertificateId"),
remote_certificate_id("remoteCertificateId") {
@@ -629,7 +635,7 @@
bytes_sent(other.bytes_sent),
bytes_received(other.bytes_received),
rtcp_transport_stats_id(other.rtcp_transport_stats_id),
- active_connection(other.active_connection),
+ dtls_state(other.dtls_state),
selected_candidate_pair_id(other.selected_candidate_pair_id),
local_certificate_id(other.local_certificate_id),
remote_certificate_id(other.remote_certificate_id) {