Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: pc/srtptransport.cc

Issue 3019443002: If SRTP sessions exist, don't create new ones when applying answer. (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pc/srtptransport.cc
diff --git a/pc/srtptransport.cc b/pc/srtptransport.cc
index f3b5309e37c0c56faefb81740b96cfcde6dae61e..64889c65f69be77c77049615d76a3c73204953e8 100644
--- a/pc/srtptransport.cc
+++ b/pc/srtptransport.cc
@@ -174,25 +174,42 @@ bool SrtpTransport::SetRtpParams(int send_cs,
int recv_cs,
const uint8_t* recv_key,
int recv_key_len) {
- CreateSrtpSessions();
+ // If parameters are being set for the first time, we should create new SRTP
+ // sessions and call "SetSend/SetRecv". Otherwise we should call
+ // "UpdateSend"/"UpdateRecv" on the existing sessions, which will internally
+ // call "srtp_update".
+ bool new_sessions = false;
+ if (!send_session_) {
+ RTC_DCHECK(!recv_session_);
+ CreateSrtpSessions();
+ new_sessions = true;
+ }
+
send_session_->SetEncryptedHeaderExtensionIds(
send_encrypted_header_extension_ids_);
if (external_auth_enabled_) {
send_session_->EnableExternalAuth();
}
- if (!send_session_->SetSend(send_cs, send_key, send_key_len)) {
+ bool ret = new_sessions
+ ? send_session_->SetSend(send_cs, send_key, send_key_len)
+ : send_session_->UpdateSend(send_cs, send_key, send_key_len);
+ if (!ret) {
ResetParams();
return false;
}
recv_session_->SetEncryptedHeaderExtensionIds(
recv_encrypted_header_extension_ids_);
- if (!recv_session_->SetRecv(recv_cs, recv_key, recv_key_len)) {
+ ret = new_sessions
+ ? recv_session_->SetRecv(recv_cs, recv_key, recv_key_len)
+ : recv_session_->UpdateRecv(recv_cs, recv_key, recv_key_len);
+ if (!ret) {
ResetParams();
return false;
}
- LOG(LS_INFO) << "SRTP activated with negotiated parameters:"
+ LOG(LS_INFO) << "SRTP " << (new_sessions ? "updated" : "activated")
+ << " with negotiated parameters:"
<< " send cipher_suite " << send_cs << " recv cipher_suite "
<< recv_cs;
return true;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698