api: make CryptoOptions non-optional
Bug: webrtc:42235111
Change-Id: I45997f7766a1a4ebddf283bcb6fe1b3d6c02dfba
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/401700
Reviewed-by: Sameer Vijaykar <samvi@google.com>
Commit-Queue: Sameer Vijaykar <samvi@google.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45274}
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index 1b0beb3..cd51c88 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -660,16 +660,11 @@
// Defines advanced optional cryptographic settings related to SRTP and
// frame encryption for native WebRTC.
- std::optional<CryptoOptions> crypto_options;
+ CryptoOptions crypto_options;
// TODO: bugs.webrtc.org/42235111 - remove after converting callers that
// expect an optional.
- CryptoOptions& GetWritableCryptoOptions() {
- if (!crypto_options) {
- crypto_options = CryptoOptions();
- }
- return *crypto_options;
- }
+ CryptoOptions& GetWritableCryptoOptions() { return crypto_options; }
// Configure if we should include the SDP attribute extmap-allow-mixed in
// our offer on session level.
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index f2cc52b..de47f59 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -404,7 +404,7 @@
SdpSemantics sdp_semantics;
std::optional<AdapterType> network_preference;
bool active_reset_srtp_params;
- std::optional<CryptoOptions> crypto_options;
+ CryptoOptions crypto_options;
bool offer_extmap_allow_mixed;
std::string turn_logging_id;
bool enable_implicit_rollback;
@@ -687,9 +687,7 @@
config.disable_encryption = options_.disable_encryption;
config.bundle_policy = configuration.bundle_policy;
config.rtcp_mux_policy = configuration.rtcp_mux_policy;
- config.crypto_options = configuration.crypto_options.has_value()
- ? *configuration.crypto_options
- : CryptoOptions();
+ config.crypto_options = configuration.crypto_options;
// Maybe enable PQC from FieldTrials
config.crypto_options.ephemeral_key_exchange_cipher_groups.Update(
@@ -1494,8 +1492,7 @@
}
if (has_local_description &&
- configuration.crypto_options.value_or(CryptoOptions()) !=
- configuration_.crypto_options) {
+ configuration.crypto_options != configuration_.crypto_options) {
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
"Can't change crypto_options after calling "
"SetLocalDescription.");
@@ -2973,10 +2970,7 @@
CryptoOptions PeerConnection::GetCryptoOptions() {
RTC_DCHECK_RUN_ON(signaling_thread());
- if (!configuration_.crypto_options) {
- configuration_.crypto_options = CryptoOptions();
- }
- return *configuration_.crypto_options;
+ return configuration_.crypto_options;
}
void PeerConnection::ClearStatsCache() {
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index f9ef0b5..2112e75 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -413,9 +413,8 @@
// `sctp_mid()` if set. Called as part of setting the local description.
RTCError StartSctpTransport(const SctpOptions& options) override;
- // Returns the CryptoOptions for this PeerConnection. This will always
- // return the RTCConfiguration.crypto_options if set and return a stock
- // configuration if nothing was set.
+ // Returns the CryptoOptions set as RTCConfiguration.crypto_options for this
+ // PeerConnection.
CryptoOptions GetCryptoOptions() override;
// Internal implementation for AddTransceiver family of methods. If
diff --git a/sdk/android/src/jni/pc/crypto_options.cc b/sdk/android/src/jni/pc/crypto_options.cc
index f37ebc1..2174ac9 100644
--- a/sdk/android/src/jni/pc/crypto_options.cc
+++ b/sdk/android/src/jni/pc/crypto_options.cc
@@ -15,19 +15,18 @@
namespace webrtc {
namespace jni {
-std::optional<CryptoOptions> JavaToNativeOptionalCryptoOptions(
+CryptoOptions JavaToNativeCryptoOptions(
JNIEnv* jni,
const JavaRef<jobject>& j_crypto_options) {
+ CryptoOptions native_crypto_options;
if (j_crypto_options.is_null()) {
- return std::nullopt;
+ return native_crypto_options;
}
-
ScopedJavaLocalRef<jobject> j_srtp =
Java_CryptoOptions_getSrtp(jni, j_crypto_options);
ScopedJavaLocalRef<jobject> j_sframe =
Java_CryptoOptions_getSFrame(jni, j_crypto_options);
- CryptoOptions native_crypto_options;
native_crypto_options.srtp.enable_gcm_crypto_suites =
Java_Srtp_getEnableGcmCryptoSuites(jni, j_srtp);
native_crypto_options.srtp.enable_aes128_sha1_32_crypto_cipher =
@@ -36,7 +35,7 @@
Java_Srtp_getEnableEncryptedRtpHeaderExtensions(jni, j_srtp);
native_crypto_options.sframe.require_frame_encryption =
Java_SFrame_getRequireFrameEncryption(jni, j_sframe);
- return std::optional<CryptoOptions>(native_crypto_options);
+ return native_crypto_options;
}
} // namespace jni
diff --git a/sdk/android/src/jni/pc/crypto_options.h b/sdk/android/src/jni/pc/crypto_options.h
index f82f218..090385a 100644
--- a/sdk/android/src/jni/pc/crypto_options.h
+++ b/sdk/android/src/jni/pc/crypto_options.h
@@ -21,7 +21,7 @@
namespace webrtc {
namespace jni {
-std::optional<CryptoOptions> JavaToNativeOptionalCryptoOptions(
+CryptoOptions JavaToNativeCryptoOptions(
JNIEnv* jni,
const JavaRef<jobject>& j_crypto_options);
diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc
index aaa4d457..d5c5ba6 100644
--- a/sdk/android/src/jni/pc/peer_connection.cc
+++ b/sdk/android/src/jni/pc/peer_connection.cc
@@ -270,8 +270,7 @@
rtc_config->sdp_semantics = JavaToNativeSdpSemantics(jni, j_sdp_semantics);
rtc_config->active_reset_srtp_params =
Java_RTCConfiguration_getActiveResetSrtpParams(jni, j_rtc_config);
- rtc_config->crypto_options =
- JavaToNativeOptionalCryptoOptions(jni, j_crypto_options);
+ rtc_config->crypto_options = JavaToNativeCryptoOptions(jni, j_crypto_options);
rtc_config->offer_extmap_allow_mixed =
Java_RTCConfiguration_getOfferExtmapAllowMixed(jni, j_rtc_config);
rtc_config->enable_implicit_rollback =
diff --git a/sdk/objc/api/peerconnection/RTCConfiguration.mm b/sdk/objc/api/peerconnection/RTCConfiguration.mm
index b0040a3..652e725 100644
--- a/sdk/objc/api/peerconnection/RTCConfiguration.mm
+++ b/sdk/objc/api/peerconnection/RTCConfiguration.mm
@@ -131,17 +131,17 @@
[[self class] sdpSemanticsForNativeSdpSemantics:config.sdp_semantics];
_turnCustomizer = config.turn_customizer;
_activeResetSrtpParams = config.active_reset_srtp_params;
- if (config.crypto_options) {
- _cryptoOptions = [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc]
- initWithSrtpEnableGcmCryptoSuites:config.crypto_options->srtp
- .enable_gcm_crypto_suites
- srtpEnableAes128Sha1_32CryptoCipher:
- config.crypto_options->srtp.enable_aes128_sha1_32_crypto_cipher
- srtpEnableEncryptedRtpHeaderExtensions:
- config.crypto_options->srtp.enable_encrypted_rtp_header_extensions
- sframeRequireFrameEncryption:config.crypto_options->sframe
- .require_frame_encryption];
- }
+
+ _cryptoOptions = [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc]
+ initWithSrtpEnableGcmCryptoSuites:config.crypto_options.srtp
+ .enable_gcm_crypto_suites
+ srtpEnableAes128Sha1_32CryptoCipher:
+ config.crypto_options.srtp.enable_aes128_sha1_32_crypto_cipher
+ srtpEnableEncryptedRtpHeaderExtensions:
+ config.crypto_options.srtp.enable_encrypted_rtp_header_extensions
+ sframeRequireFrameEncryption:config.crypto_options.sframe
+ .require_frame_encryption];
+
_turnLoggingId =
[NSString stringWithUTF8String:config.turn_logging_id.c_str()];
_rtcpAudioReportIntervalMs = config.audio_rtcp_report_interval_ms();
@@ -298,8 +298,7 @@
_cryptoOptions.srtpEnableEncryptedRtpHeaderExtensions ? true : false;
nativeCryptoOptions.sframe.require_frame_encryption =
_cryptoOptions.sframeRequireFrameEncryption ? true : false;
- nativeConfig->crypto_options =
- std::optional<webrtc::CryptoOptions>(nativeCryptoOptions);
+ nativeConfig->crypto_options = nativeCryptoOptions;
}
nativeConfig->turn_logging_id = [_turnLoggingId UTF8String];
nativeConfig->set_audio_rtcp_report_interval_ms(_rtcpAudioReportIntervalMs);
diff --git a/sdk/objc/unittests/RTCConfigurationTest.mm b/sdk/objc/unittests/RTCConfigurationTest.mm
index d4973bd..5c8fca0 100644
--- a/sdk/objc/unittests/RTCConfigurationTest.mm
+++ b/sdk/objc/unittests/RTCConfigurationTest.mm
@@ -81,15 +81,14 @@
EXPECT_EQ(webrtc::PeerConnectionInterface::GATHER_CONTINUALLY,
nativeConfig->continual_gathering_policy);
EXPECT_EQ(true, nativeConfig->prune_turn_ports);
- EXPECT_EQ(true, nativeConfig->crypto_options->srtp.enable_gcm_crypto_suites);
+ EXPECT_EQ(true, nativeConfig->crypto_options.srtp.enable_gcm_crypto_suites);
EXPECT_EQ(
true,
- nativeConfig->crypto_options->srtp.enable_aes128_sha1_32_crypto_cipher);
- EXPECT_EQ(true,
- nativeConfig->crypto_options->srtp
- .enable_encrypted_rtp_header_extensions);
- EXPECT_EQ(true,
- nativeConfig->crypto_options->sframe.require_frame_encryption);
+ nativeConfig->crypto_options.srtp.enable_aes128_sha1_32_crypto_cipher);
+ EXPECT_EQ(
+ true,
+ nativeConfig->crypto_options.srtp.enable_encrypted_rtp_header_extensions);
+ EXPECT_EQ(true, nativeConfig->crypto_options.sframe.require_frame_encryption);
EXPECT_EQ(2500, nativeConfig->audio_rtcp_report_interval_ms());
EXPECT_EQ(3750, nativeConfig->video_rtcp_report_interval_ms());
}