Expose TLS version and SRTP cipher to API Bug: webrtc:10261 Change-Id: I5e0821e66a34448042cf73866511d79eefe40dfb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158662 Reviewed-by: Steve Anton <steveanton@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29645}
diff --git a/api/dtls_transport_interface.cc b/api/dtls_transport_interface.cc index 7b50335..a68ff8f 100644 --- a/api/dtls_transport_interface.cc +++ b/api/dtls_transport_interface.cc
@@ -20,16 +20,22 @@ DtlsTransportInformation::DtlsTransportInformation( DtlsTransportState state, + absl::optional<int> tls_version, absl::optional<int> ssl_cipher_suite, + absl::optional<int> srtp_cipher_suite, std::unique_ptr<rtc::SSLCertChain> remote_ssl_certificates) : state_(state), + tls_version_(tls_version), ssl_cipher_suite_(ssl_cipher_suite), + srtp_cipher_suite_(srtp_cipher_suite), remote_ssl_certificates_(std::move(remote_ssl_certificates)) {} DtlsTransportInformation::DtlsTransportInformation( const DtlsTransportInformation& c) : state_(c.state()), + tls_version_(c.tls_version_), ssl_cipher_suite_(c.ssl_cipher_suite_), + srtp_cipher_suite_(c.srtp_cipher_suite_), remote_ssl_certificates_(c.remote_ssl_certificates() ? c.remote_ssl_certificates()->Clone() : nullptr) {} @@ -37,7 +43,9 @@ DtlsTransportInformation& DtlsTransportInformation::operator=( const DtlsTransportInformation& c) { state_ = c.state(); + tls_version_ = c.tls_version_; ssl_cipher_suite_ = c.ssl_cipher_suite_; + srtp_cipher_suite_ = c.srtp_cipher_suite_; remote_ssl_certificates_ = c.remote_ssl_certificates() ? c.remote_ssl_certificates()->Clone() : nullptr;
diff --git a/api/dtls_transport_interface.h b/api/dtls_transport_interface.h index 8fd8cd1..86715b0 100644 --- a/api/dtls_transport_interface.h +++ b/api/dtls_transport_interface.h
@@ -44,7 +44,9 @@ explicit DtlsTransportInformation(DtlsTransportState state); DtlsTransportInformation( DtlsTransportState state, + absl::optional<int> tls_version, absl::optional<int> ssl_cipher_suite, + absl::optional<int> srtp_cipher_suite, std::unique_ptr<rtc::SSLCertChain> remote_ssl_certificates); // Copy and assign DtlsTransportInformation(const DtlsTransportInformation& c); @@ -55,7 +57,9 @@ default; DtlsTransportState state() const { return state_; } + absl::optional<int> tls_version() const { return tls_version_; } absl::optional<int> ssl_cipher_suite() const { return ssl_cipher_suite_; } + absl::optional<int> srtp_cipher_suite() const { return srtp_cipher_suite_; } // The accessor returns a temporary pointer, it does not release ownership. const rtc::SSLCertChain* remote_ssl_certificates() const { return remote_ssl_certificates_.get(); @@ -63,7 +67,9 @@ private: DtlsTransportState state_; + absl::optional<int> tls_version_; absl::optional<int> ssl_cipher_suite_; + absl::optional<int> srtp_cipher_suite_; std::unique_ptr<rtc::SSLCertChain> remote_ssl_certificates_; };
diff --git a/pc/dtls_transport.cc b/pc/dtls_transport.cc index c261b43..8abfcae 100644 --- a/pc/dtls_transport.cc +++ b/pc/dtls_transport.cc
@@ -118,16 +118,25 @@ if (internal_dtls_transport_) { if (internal_dtls_transport_->dtls_state() == cricket::DTLS_TRANSPORT_CONNECTED) { + bool success = true; int ssl_cipher_suite; - if (internal_dtls_transport_->GetSslCipherSuite(&ssl_cipher_suite)) { + int tls_version; + int srtp_cipher; + success &= internal_dtls_transport_->GetSslVersionBytes(&tls_version); + success &= internal_dtls_transport_->GetSslCipherSuite(&ssl_cipher_suite); + success &= internal_dtls_transport_->GetSrtpCryptoSuite(&srtp_cipher); + if (success) { info_ = DtlsTransportInformation( - TranslateState(internal_dtls_transport_->dtls_state()), - ssl_cipher_suite, + TranslateState(internal_dtls_transport_->dtls_state()), tls_version, + ssl_cipher_suite, srtp_cipher, internal_dtls_transport_->GetRemoteSSLCertChain()); } else { + RTC_LOG(LS_ERROR) << "DtlsTransport in connected state has incomplete " + "TLS information"; info_ = DtlsTransportInformation( TranslateState(internal_dtls_transport_->dtls_state()), - absl::nullopt, internal_dtls_transport_->GetRemoteSSLCertChain()); + absl::nullopt, absl::nullopt, absl::nullopt, + internal_dtls_transport_->GetRemoteSSLCertChain()); } } else { info_ = DtlsTransportInformation(