Index: talk/app/webrtc/objc/RTCPeerConnectionInterface.mm |
diff --git a/talk/app/webrtc/objc/RTCPeerConnectionInterface.mm b/talk/app/webrtc/objc/RTCPeerConnectionInterface.mm |
index 7cc10e9d85bf81bffcda25118e668db62089bd14..1ab9c564296be13b9e6c524cf8691930336d7f86 100644 |
--- a/talk/app/webrtc/objc/RTCPeerConnectionInterface.mm |
+++ b/talk/app/webrtc/objc/RTCPeerConnectionInterface.mm |
@@ -33,6 +33,8 @@ |
#include <memory> |
+#include "webrtc/base/rtccertificategenerator.h" |
+ |
@implementation RTCConfiguration |
@synthesize iceTransportsType = _iceTransportsType; |
@@ -83,30 +85,49 @@ |
#pragma mark - Private |
-- (webrtc::PeerConnectionInterface::RTCConfiguration)nativeConfiguration { |
- webrtc::PeerConnectionInterface::RTCConfiguration nativeConfig; |
- nativeConfig.type = [RTCEnumConverter nativeEnumForIceTransportsType:_iceTransportsType]; |
+- (webrtc::PeerConnectionInterface::RTCConfiguration *) |
+ createNativeConfiguration { |
+ std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration> |
+ nativeConfig(new webrtc::PeerConnectionInterface::RTCConfiguration()); |
+ nativeConfig->type = |
+ [RTCEnumConverter nativeEnumForIceTransportsType:_iceTransportsType]; |
for (RTCICEServer *iceServer : _iceServers) { |
- nativeConfig.servers.push_back(iceServer.iceServer); |
+ nativeConfig->servers.push_back(iceServer.iceServer); |
} |
- nativeConfig.bundle_policy = [RTCEnumConverter nativeEnumForBundlePolicy:_bundlePolicy]; |
- nativeConfig.rtcp_mux_policy = [RTCEnumConverter nativeEnumForRtcpMuxPolicy:_rtcpMuxPolicy]; |
- nativeConfig.tcp_candidate_policy = |
+ nativeConfig->bundle_policy = |
+ [RTCEnumConverter nativeEnumForBundlePolicy:_bundlePolicy]; |
+ nativeConfig->rtcp_mux_policy = |
+ [RTCEnumConverter nativeEnumForRtcpMuxPolicy:_rtcpMuxPolicy]; |
+ nativeConfig->tcp_candidate_policy = |
[RTCEnumConverter nativeEnumForTcpCandidatePolicy:_tcpCandidatePolicy]; |
- nativeConfig.audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets; |
- nativeConfig.ice_connection_receiving_timeout = _iceConnectionReceivingTimeout; |
- nativeConfig.ice_backup_candidate_pair_ping_interval = _iceBackupCandidatePairPingInterval; |
- if (_keyType == kRTCEncryptionKeyTypeECDSA) { |
- std::unique_ptr<rtc::SSLIdentity> identity( |
- rtc::SSLIdentity::Generate(webrtc::kIdentityName, rtc::KT_ECDSA)); |
- if (identity) { |
- nativeConfig.certificates.push_back( |
- rtc::RTCCertificate::Create(std::move(identity))); |
- } else { |
- RTCLogWarning(@"Failed to generate ECDSA identity. RSA will be used."); |
+ nativeConfig->audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets; |
+ nativeConfig->ice_connection_receiving_timeout = |
+ _iceConnectionReceivingTimeout; |
+ nativeConfig->ice_backup_candidate_pair_ping_interval = |
+ _iceBackupCandidatePairPingInterval; |
+ rtc::KeyType keyType = |
+ [[self class] nativeEncryptionKeyTypeForKeyType:_keyType]; |
+ if (keyType != rtc::KT_DEFAULT) { |
+ rtc::scoped_refptr<rtc::RTCCertificate> certificate = |
+ rtc::RTCCertificateGenerator::GenerateCertificate( |
+ rtc::KeyParams(keyType), rtc::Optional<uint64_t>()); |
+ if (!certificate) { |
+ RTCLogError(@"Failed to generate certificate."); |
+ return nullptr; |
} |
+ nativeConfig->certificates.push_back(certificate); |
+ } |
+ return nativeConfig.release(); |
+} |
+ |
++ (rtc::KeyType)nativeEncryptionKeyTypeForKeyType: |
+ (RTCEncryptionKeyType)keyType { |
+ switch (keyType) { |
+ case kRTCEncryptionKeyTypeRSA: |
+ return rtc::KT_RSA; |
+ case kRTCEncryptionKeyTypeECDSA: |
+ return rtc::KT_ECDSA; |
} |
- return nativeConfig; |
} |
@end |