Replacing SSLIdentity* with scoped_refptr<RTCCertificate> in the cricket::TransportDescriptionFactory layers.
Updates TransportDescriptionFactory, calls and unittests.
BUG=webrtc:4927
R=tommi@webrtc.org, torbjorng@webrtc.org
Review URL: https://codereview.webrtc.org/1311903004 .
Cr-Commit-Position: refs/heads/master@{#9815}
diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc
index 2c52d13..0322eff 100644
--- a/talk/app/webrtc/webrtcsession_unittest.cc
+++ b/talk/app/webrtc/webrtcsession_unittest.cc
@@ -562,8 +562,9 @@
std::string identity_name = "WebRTC" +
rtc::ToString(rtc::CreateRandomId());
// Confirmed to work with KT_RSA and KT_ECDSA.
- identity_.reset(rtc::SSLIdentity::Generate(identity_name, rtc::KT_DEFAULT));
- tdesc_factory_->set_identity(identity_.get());
+ tdesc_factory_->set_certificate(rtc::RTCCertificate::Create(
+ rtc::scoped_ptr<rtc::SSLIdentity>(rtc::SSLIdentity::Generate(
+ identity_name, rtc::KT_DEFAULT)).Pass()));
tdesc_factory_->set_secure(cricket::SEC_REQUIRED);
}
@@ -1274,7 +1275,6 @@
cricket::FakeDeviceManager* device_manager_;
rtc::scoped_ptr<cricket::ChannelManager> channel_manager_;
rtc::scoped_ptr<cricket::TransportDescriptionFactory> tdesc_factory_;
- rtc::scoped_ptr<rtc::SSLIdentity> identity_;
rtc::scoped_ptr<cricket::MediaSessionDescriptionFactory> desc_factory_;
rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_;
rtc::scoped_ptr<rtc::VirtualSocketServer> vss_;
diff --git a/talk/app/webrtc/webrtcsessiondescriptionfactory.cc b/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
index 41bcfa0..a06437f 100644
--- a/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
+++ b/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
@@ -255,7 +255,7 @@
}
}
- transport_desc_factory_.set_identity(NULL);
+ transport_desc_factory_.set_certificate(nullptr);
}
void WebRtcSessionDescriptionFactory::CreateOffer(
@@ -522,8 +522,7 @@
certificate_request_state_ = CERTIFICATE_SUCCEEDED;
SignalCertificateReady(certificate);
- // TODO(hbos): set_certificate
- transport_desc_factory_.set_identity(certificate->identity());
+ transport_desc_factory_.set_certificate(certificate);
transport_desc_factory_.set_secure(cricket::SEC_ENABLED);
while (!create_session_description_requests_.empty()) {
diff --git a/talk/session/media/mediasession_unittest.cc b/talk/session/media/mediasession_unittest.cc
index ededa8a..7787ab5 100644
--- a/talk/session/media/mediasession_unittest.cc
+++ b/talk/session/media/mediasession_unittest.cc
@@ -226,15 +226,20 @@
class MediaSessionDescriptionFactoryTest : public testing::Test {
public:
MediaSessionDescriptionFactoryTest()
- : f1_(&tdf1_), f2_(&tdf2_), id1_("id1"), id2_("id2") {
+ : f1_(&tdf1_),
+ f2_(&tdf2_) {
f1_.set_audio_codecs(MAKE_VECTOR(kAudioCodecs1));
f1_.set_video_codecs(MAKE_VECTOR(kVideoCodecs1));
f1_.set_data_codecs(MAKE_VECTOR(kDataCodecs1));
f2_.set_audio_codecs(MAKE_VECTOR(kAudioCodecs2));
f2_.set_video_codecs(MAKE_VECTOR(kVideoCodecs2));
f2_.set_data_codecs(MAKE_VECTOR(kDataCodecs2));
- tdf1_.set_identity(&id1_);
- tdf2_.set_identity(&id2_);
+ tdf1_.set_certificate(rtc::RTCCertificate::Create(
+ rtc::scoped_ptr<rtc::SSLIdentity>(
+ new rtc::FakeSSLIdentity("id1")).Pass()));
+ tdf2_.set_certificate(rtc::RTCCertificate::Create(
+ rtc::scoped_ptr<rtc::SSLIdentity>(
+ new rtc::FakeSSLIdentity("id2")).Pass()));
}
// Create a video StreamParamsVec object with:
@@ -470,8 +475,6 @@
MediaSessionDescriptionFactory f2_;
TransportDescriptionFactory tdf1_;
TransportDescriptionFactory tdf2_;
- rtc::FakeSSLIdentity id1_;
- rtc::FakeSSLIdentity id2_;
};
// Create a typical audio offer, and ensure it matches what we expect.
diff --git a/webrtc/p2p/base/transportdescriptionfactory.cc b/webrtc/p2p/base/transportdescriptionfactory.cc
index 7654fdf..4c701df 100644
--- a/webrtc/p2p/base/transportdescriptionfactory.cc
+++ b/webrtc/p2p/base/transportdescriptionfactory.cc
@@ -20,8 +20,7 @@
namespace cricket {
TransportDescriptionFactory::TransportDescriptionFactory()
- : secure_(SEC_DISABLED),
- identity_(NULL) {
+ : secure_(SEC_DISABLED) {
}
TransportDescription* TransportDescriptionFactory::CreateOffer(
@@ -97,8 +96,8 @@
bool TransportDescriptionFactory::SetSecurityInfo(
TransportDescription* desc, ConnectionRole role) const {
- if (!identity_) {
- LOG(LS_ERROR) << "Cannot create identity digest with no identity";
+ if (!certificate_) {
+ LOG(LS_ERROR) << "Cannot create identity digest with no certificate";
return false;
}
@@ -106,13 +105,14 @@
// RFC 4572 Section 5 requires that those lines use the same hash function as
// the certificate's signature.
std::string digest_alg;
- if (!identity_->certificate().GetSignatureDigestAlgorithm(&digest_alg)) {
+ if (!certificate_->ssl_certificate().GetSignatureDigestAlgorithm(
+ &digest_alg)) {
LOG(LS_ERROR) << "Failed to retrieve the certificate's digest algorithm";
return false;
}
desc->identity_fingerprint.reset(
- rtc::SSLFingerprint::Create(digest_alg, identity_));
+ rtc::SSLFingerprint::Create(digest_alg, certificate_->identity()));
if (!desc->identity_fingerprint.get()) {
LOG(LS_ERROR) << "Failed to create identity fingerprint, alg="
<< digest_alg;
diff --git a/webrtc/p2p/base/transportdescriptionfactory.h b/webrtc/p2p/base/transportdescriptionfactory.h
index 2bd8661..828aa6d22 100644
--- a/webrtc/p2p/base/transportdescriptionfactory.h
+++ b/webrtc/p2p/base/transportdescriptionfactory.h
@@ -11,6 +11,7 @@
#ifndef WEBRTC_P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
#define WEBRTC_P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
+#include "webrtc/base/rtccertificate.h"
#include "webrtc/p2p/base/transportdescription.h"
namespace rtc {
@@ -33,13 +34,18 @@
// Default ctor; use methods below to set configuration.
TransportDescriptionFactory();
SecurePolicy secure() const { return secure_; }
- // The identity to use when setting up DTLS.
- rtc::SSLIdentity* identity() const { return identity_; }
+ // The certificate to use when setting up DTLS.
+ const rtc::scoped_refptr<rtc::RTCCertificate>& certificate() const {
+ return certificate_;
+ }
// Specifies the transport security policy to use.
void set_secure(SecurePolicy s) { secure_ = s; }
- // Specifies the identity to use (only used when secure is not SEC_DISABLED).
- void set_identity(rtc::SSLIdentity* identity) { identity_ = identity; }
+ // Specifies the certificate to use (only used when secure != SEC_DISABLED).
+ void set_certificate(
+ const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) {
+ certificate_ = certificate;
+ }
// Creates a transport description suitable for use in an offer.
TransportDescription* CreateOffer(const TransportOptions& options,
@@ -55,7 +61,7 @@
ConnectionRole role) const;
SecurePolicy secure_;
- rtc::SSLIdentity* identity_;
+ rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
};
} // namespace cricket
diff --git a/webrtc/p2p/base/transportdescriptionfactory_unittest.cc b/webrtc/p2p/base/transportdescriptionfactory_unittest.cc
index 16a539f..e3992df 100644
--- a/webrtc/p2p/base/transportdescriptionfactory_unittest.cc
+++ b/webrtc/p2p/base/transportdescriptionfactory_unittest.cc
@@ -26,8 +26,10 @@
class TransportDescriptionFactoryTest : public testing::Test {
public:
TransportDescriptionFactoryTest()
- : id1_(new rtc::FakeSSLIdentity("User1")),
- id2_(new rtc::FakeSSLIdentity("User2")) {
+ : cert1_(rtc::RTCCertificate::Create(scoped_ptr<rtc::SSLIdentity>(
+ new rtc::FakeSSLIdentity("User1")).Pass())),
+ cert2_(rtc::RTCCertificate::Create(scoped_ptr<rtc::SSLIdentity>(
+ new rtc::FakeSSLIdentity("User2")).Pass())) {
}
void CheckDesc(const TransportDescription* desc,
@@ -61,8 +63,8 @@
if (dtls) {
f1_.set_secure(cricket::SEC_ENABLED);
f2_.set_secure(cricket::SEC_ENABLED);
- f1_.set_identity(id1_.get());
- f2_.set_identity(id2_.get());
+ f1_.set_certificate(cert1_);
+ f2_.set_certificate(cert2_);
} else {
f1_.set_secure(cricket::SEC_DISABLED);
f2_.set_secure(cricket::SEC_DISABLED);
@@ -113,8 +115,9 @@
protected:
TransportDescriptionFactory f1_;
TransportDescriptionFactory f2_;
- scoped_ptr<rtc::SSLIdentity> id1_;
- scoped_ptr<rtc::SSLIdentity> id2_;
+
+ rtc::scoped_refptr<rtc::RTCCertificate> cert1_;
+ rtc::scoped_refptr<rtc::RTCCertificate> cert2_;
};
TEST_F(TransportDescriptionFactoryTest, TestOfferDefault) {
@@ -125,9 +128,10 @@
TEST_F(TransportDescriptionFactoryTest, TestOfferDtls) {
f1_.set_secure(cricket::SEC_ENABLED);
- f1_.set_identity(id1_.get());
+ f1_.set_certificate(cert1_);
std::string digest_alg;
- ASSERT_TRUE(id1_->certificate().GetSignatureDigestAlgorithm(&digest_alg));
+ ASSERT_TRUE(cert1_->ssl_certificate().GetSignatureDigestAlgorithm(
+ &digest_alg));
scoped_ptr<TransportDescription> desc(f1_.CreateOffer(
TransportOptions(), NULL));
CheckDesc(desc.get(), "", "", "", digest_alg);
@@ -149,9 +153,10 @@
// The ICE credentials should stay the same in the new offer.
TEST_F(TransportDescriptionFactoryTest, TestOfferDtlsReofferDtls) {
f1_.set_secure(cricket::SEC_ENABLED);
- f1_.set_identity(id1_.get());
+ f1_.set_certificate(cert1_);
std::string digest_alg;
- ASSERT_TRUE(id1_->certificate().GetSignatureDigestAlgorithm(&digest_alg));
+ ASSERT_TRUE(cert1_->ssl_certificate().GetSignatureDigestAlgorithm(
+ &digest_alg));
scoped_ptr<TransportDescription> old_desc(f1_.CreateOffer(
TransportOptions(), NULL));
ASSERT_TRUE(old_desc.get() != NULL);
@@ -192,7 +197,7 @@
// Test that we handle answering an offer with DTLS with no DTLS.
TEST_F(TransportDescriptionFactoryTest, TestAnswerDtlsToNoDtls) {
f1_.set_secure(cricket::SEC_ENABLED);
- f1_.set_identity(id1_.get());
+ f1_.set_certificate(cert1_);
scoped_ptr<TransportDescription> offer(
f1_.CreateOffer(TransportOptions(), NULL));
ASSERT_TRUE(offer.get() != NULL);
@@ -205,7 +210,7 @@
// but fail if we require DTLS.
TEST_F(TransportDescriptionFactoryTest, TestAnswerNoDtlsToDtls) {
f2_.set_secure(cricket::SEC_ENABLED);
- f2_.set_identity(id2_.get());
+ f2_.set_certificate(cert2_);
scoped_ptr<TransportDescription> offer(
f1_.CreateOffer(TransportOptions(), NULL));
ASSERT_TRUE(offer.get() != NULL);
@@ -222,14 +227,15 @@
// DTLS enabled and required.
TEST_F(TransportDescriptionFactoryTest, TestAnswerDtlsToDtls) {
f1_.set_secure(cricket::SEC_ENABLED);
- f1_.set_identity(id1_.get());
+ f1_.set_certificate(cert1_);
f2_.set_secure(cricket::SEC_ENABLED);
- f2_.set_identity(id2_.get());
+ f2_.set_certificate(cert2_);
// f2_ produces the answer that is being checked in this test, so the
- // answer must contain fingerprint lines with id2_'s digest algorithm.
+ // answer must contain fingerprint lines with cert2_'s digest algorithm.
std::string digest_alg2;
- ASSERT_TRUE(id2_->certificate().GetSignatureDigestAlgorithm(&digest_alg2));
+ ASSERT_TRUE(cert2_->ssl_certificate().GetSignatureDigestAlgorithm(
+ &digest_alg2));
scoped_ptr<TransportDescription> offer(
f1_.CreateOffer(TransportOptions(), NULL));