diff --git a/webrtc/DtlsTransport.cpp b/webrtc/DtlsTransport.cpp index b1842160..5ae4f4b0 100644 --- a/webrtc/DtlsTransport.cpp +++ b/webrtc/DtlsTransport.cpp @@ -132,14 +132,9 @@ namespace RTC // Generate a X509 certificate and private key (unless PEM files are provided). auto ssl = toolkit::SSL_Initor::Instance().getSSLCtx("", true); - if (!ssl) - { + if (!ssl || !ReadCertificateAndPrivateKeyFromContext(ssl.get())) { GenerateCertificateAndPrivateKey(); } - else - { - ReadCertificateAndPrivateKeyFromContext(ssl.get()); - } // Create a global SSL_CTX. CreateSslCtx(); @@ -298,31 +293,22 @@ namespace RTC MS_THROW_ERROR("DTLS certificate and private key generation failed"); } - void DtlsTransport::DtlsEnvironment::ReadCertificateAndPrivateKeyFromContext(SSL_CTX *ctx) + bool DtlsTransport::DtlsEnvironment::ReadCertificateAndPrivateKeyFromContext(SSL_CTX *ctx) { MS_TRACE(); - certificate = SSL_CTX_get0_certificate(ctx); - if (!certificate) - { - LOG_OPENSSL_ERROR("SSL_CTX_get0_certificate() failed"); - goto error; + if (!certificate) { + return false; } X509_up_ref(certificate); privateKey = SSL_CTX_get0_privatekey(ctx); - if (!privateKey) - { - LOG_OPENSSL_ERROR("SSL_CTX_get0_privatekey() failed"); - goto error; + if (!privateKey) { + return false; } EVP_PKEY_up_ref(privateKey); - InfoL << "Load webrtc dtls certificate: " << toolkit::SSLUtil::getServerName(certificate); - return; - - error: - MS_THROW_ERROR("error reading DTLS certificate and private key PEM files"); + return true; } void DtlsTransport::DtlsEnvironment::CreateSslCtx() diff --git a/webrtc/DtlsTransport.hpp b/webrtc/DtlsTransport.hpp index 34fc8fc7..53a1981d 100644 --- a/webrtc/DtlsTransport.hpp +++ b/webrtc/DtlsTransport.hpp @@ -88,7 +88,7 @@ namespace RTC private: DtlsEnvironment(); void GenerateCertificateAndPrivateKey(); - void ReadCertificateAndPrivateKeyFromContext(SSL_CTX *ctx); + bool ReadCertificateAndPrivateKeyFromContext(SSL_CTX *ctx); void CreateSslCtx(); void GenerateFingerprints(); diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index 4ec13e6f..9ac6251f 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -251,7 +251,7 @@ void WebRtcTransport::sendSockData(const char *buf, size_t len, RTC::TransportTu } Session::Ptr WebRtcTransport::getSession() const { - auto tuple = _ice_server->GetSelectedTuple(true); + auto tuple = _ice_server ? _ice_server->GetSelectedTuple(true) : nullptr; return tuple ? static_pointer_cast(tuple->shared_from_this()) : nullptr; }