stats: add dtlsRole to transport
https://w3c.github.io/webrtc-stats/#dom-rtctransportstats-dtlsrole BUG=webrtc:13978 Change-Id: Ib158427d2df0307884381bdd46c411f60f56a371 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/259761 Reviewed-by: Henrik Boström <hbos@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com> Cr-Commit-Position: refs/heads/main@{#36730}
This commit is contained in:
parent
8c354882f8
commit
69c1df2f44
@ -90,6 +90,13 @@ struct RTCContentType {
|
||||
static const char* const kScreenshare;
|
||||
};
|
||||
|
||||
// https://w3c.github.io/webrtc-stats/#dom-rtcdtlsrole
|
||||
struct RTCDtlsRole {
|
||||
static const char* const kUnknown;
|
||||
static const char* const kClient;
|
||||
static const char* const kServer;
|
||||
};
|
||||
|
||||
// https://w3c.github.io/webrtc-stats/#certificatestats-dict*
|
||||
class RTC_EXPORT RTCCertificateStats final : public RTCStats {
|
||||
public:
|
||||
@ -689,6 +696,7 @@ class RTC_EXPORT RTCTransportStats final : public RTCStats {
|
||||
RTCStatsMember<std::string> remote_certificate_id;
|
||||
RTCStatsMember<std::string> tls_version;
|
||||
RTCStatsMember<std::string> dtls_cipher;
|
||||
RTCStatsMember<std::string> dtls_role;
|
||||
RTCStatsMember<std::string> srtp_cipher;
|
||||
RTCStatsMember<uint32_t> selected_candidate_pair_changes;
|
||||
};
|
||||
|
||||
@ -714,6 +714,10 @@ bool JsepTransport::GetTransportStats(DtlsTransportInternal* dtls_transport,
|
||||
dtls_transport->GetSrtpCryptoSuite(&substats.srtp_crypto_suite);
|
||||
dtls_transport->GetSslCipherSuite(&substats.ssl_cipher_suite);
|
||||
substats.dtls_state = dtls_transport->dtls_state();
|
||||
rtc::SSLRole dtls_role;
|
||||
if (dtls_transport->GetDtlsRole(&dtls_role)) {
|
||||
substats.dtls_role = dtls_role;
|
||||
}
|
||||
if (!dtls_transport->ice_transport()->GetStats(
|
||||
&substats.ice_transport_stats)) {
|
||||
return false;
|
||||
|
||||
@ -2118,6 +2118,15 @@ void RTCStatsCollector::ProduceTransportStats_n(
|
||||
snprintf(bytes, sizeof(bytes), "%04X", channel_stats.ssl_version_bytes);
|
||||
transport_stats->tls_version = bytes;
|
||||
}
|
||||
|
||||
if (channel_stats.dtls_role) {
|
||||
transport_stats->dtls_role = *channel_stats.dtls_role == rtc::SSL_CLIENT
|
||||
? webrtc::RTCDtlsRole::kClient
|
||||
: webrtc::RTCDtlsRole::kServer;
|
||||
} else {
|
||||
transport_stats->dtls_role = webrtc::RTCDtlsRole::kUnknown;
|
||||
}
|
||||
|
||||
if (channel_stats.ssl_cipher_suite != rtc::kTlsNullWithNullNull &&
|
||||
rtc::SSLStreamAdapter::SslCipherSuiteToName(
|
||||
channel_stats.ssl_cipher_suite)
|
||||
|
||||
@ -2460,6 +2460,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
|
||||
expected_rtp_transport.bytes_received = 1337;
|
||||
expected_rtp_transport.packets_received = 4;
|
||||
expected_rtp_transport.dtls_state = RTCDtlsTransportState::kNew;
|
||||
expected_rtp_transport.dtls_role = RTCDtlsRole::kUnknown;
|
||||
expected_rtp_transport.selected_candidate_pair_changes = 1;
|
||||
|
||||
ASSERT_TRUE(report->Get(expected_rtp_transport.id()));
|
||||
@ -2501,6 +2502,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
|
||||
expected_rtcp_transport.bytes_received = 42;
|
||||
expected_rtcp_transport.packets_received = 4;
|
||||
expected_rtcp_transport.dtls_state = RTCDtlsTransportState::kConnecting;
|
||||
expected_rtcp_transport.dtls_role = RTCDtlsRole::kUnknown;
|
||||
expected_rtcp_transport.selected_candidate_pair_changes = 0;
|
||||
|
||||
expected_rtp_transport.rtcp_transport_stats_id = expected_rtcp_transport.id();
|
||||
@ -2600,6 +2602,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStatsWithCrypto) {
|
||||
rtp_transport_channel_stats.ice_transport_stats
|
||||
.selected_candidate_pair_changes = 1;
|
||||
rtp_transport_channel_stats.ssl_version_bytes = 0x0203;
|
||||
rtp_transport_channel_stats.dtls_role = rtc::SSL_CLIENT;
|
||||
// 0x2F is TLS_RSA_WITH_AES_128_CBC_SHA according to IANA
|
||||
rtp_transport_channel_stats.ssl_cipher_suite = 0x2F;
|
||||
rtp_transport_channel_stats.srtp_crypto_suite = rtc::kSrtpAes128CmSha1_80;
|
||||
@ -2620,6 +2623,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStatsWithCrypto) {
|
||||
expected_rtp_transport.packets_received = 0;
|
||||
// Crypto parameters
|
||||
expected_rtp_transport.tls_version = "0203";
|
||||
expected_rtp_transport.dtls_role = RTCDtlsRole::kClient;
|
||||
expected_rtp_transport.dtls_cipher = "TLS_RSA_WITH_AES_128_CBC_SHA";
|
||||
expected_rtp_transport.srtp_cipher = "AES_CM_128_HMAC_SHA1_80";
|
||||
|
||||
|
||||
@ -1136,6 +1136,7 @@ class RTCStatsReportVerifier {
|
||||
RTCCertificateStats::kType);
|
||||
verifier.TestMemberIsDefined(transport.tls_version);
|
||||
verifier.TestMemberIsDefined(transport.dtls_cipher);
|
||||
verifier.TestMemberIsDefined(transport.dtls_role);
|
||||
verifier.TestMemberIsDefined(transport.srtp_cipher);
|
||||
verifier.TestMemberIsPositive<uint32_t>(
|
||||
transport.selected_candidate_pair_changes);
|
||||
|
||||
@ -31,6 +31,7 @@ struct TransportChannelStats {
|
||||
int ssl_version_bytes = 0;
|
||||
int srtp_crypto_suite = rtc::kSrtpInvalidCryptoSuite;
|
||||
int ssl_cipher_suite = rtc::kTlsNullWithNullNull;
|
||||
absl::optional<rtc::SSLRole> dtls_role;
|
||||
webrtc::DtlsTransportState dtls_state = webrtc::DtlsTransportState::kNew;
|
||||
IceTransportStats ice_transport_stats;
|
||||
};
|
||||
|
||||
@ -62,6 +62,11 @@ const char* const RTCQualityLimitationReason::kOther = "other";
|
||||
const char* const RTCContentType::kUnspecified = "unspecified";
|
||||
const char* const RTCContentType::kScreenshare = "screenshare";
|
||||
|
||||
// https://w3c.github.io/webrtc-stats/#dom-rtcdtlsrole
|
||||
const char* const RTCDtlsRole::kUnknown = "unknown";
|
||||
const char* const RTCDtlsRole::kClient = "client";
|
||||
const char* const RTCDtlsRole::kServer = "server";
|
||||
|
||||
// clang-format off
|
||||
WEBRTC_RTCSTATS_IMPL(RTCCertificateStats, RTCStats, "certificate",
|
||||
&fingerprint,
|
||||
@ -1082,6 +1087,7 @@ WEBRTC_RTCSTATS_IMPL(RTCTransportStats, RTCStats, "transport",
|
||||
&remote_certificate_id,
|
||||
&tls_version,
|
||||
&dtls_cipher,
|
||||
&dtls_role,
|
||||
&srtp_cipher,
|
||||
&selected_candidate_pair_changes)
|
||||
// clang-format on
|
||||
@ -1103,6 +1109,7 @@ RTCTransportStats::RTCTransportStats(std::string&& id, int64_t timestamp_us)
|
||||
remote_certificate_id("remoteCertificateId"),
|
||||
tls_version("tlsVersion"),
|
||||
dtls_cipher("dtlsCipher"),
|
||||
dtls_role("dtlsRole"),
|
||||
srtp_cipher("srtpCipher"),
|
||||
selected_candidate_pair_changes("selectedCandidatePairChanges") {}
|
||||
|
||||
@ -1119,6 +1126,7 @@ RTCTransportStats::RTCTransportStats(const RTCTransportStats& other)
|
||||
remote_certificate_id(other.remote_certificate_id),
|
||||
tls_version(other.tls_version),
|
||||
dtls_cipher(other.dtls_cipher),
|
||||
dtls_role(other.dtls_role),
|
||||
srtp_cipher(other.srtp_cipher),
|
||||
selected_candidate_pair_changes(other.selected_candidate_pair_changes) {}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user