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

Unified Diff: talk/session/media/srtpfilter.cc

Issue 1442863003: Revert of Remove global list of SRTP sessions. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month 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 | « talk/session/media/srtpfilter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/session/media/srtpfilter.cc
diff --git a/talk/session/media/srtpfilter.cc b/talk/session/media/srtpfilter.cc
index 4b2412fc480f77dc3229a83164726f7bccdffd45..079ddfb57ee553474c2a42470c2de446d4b9c390 100644
--- a/talk/session/media/srtpfilter.cc
+++ b/talk/session/media/srtpfilter.cc
@@ -481,7 +481,7 @@
bool SrtpSession::inited_ = false;
-// This lock protects SrtpSession::inited_.
+// This lock protects SrtpSession::inited_ and SrtpSession::sessions_.
rtc::GlobalLockPod SrtpSession::lock_;
SrtpSession::SrtpSession()
@@ -490,13 +490,19 @@
rtcp_auth_tag_len_(0),
srtp_stat_(new SrtpStat()),
last_send_seq_num_(-1) {
+ {
+ rtc::GlobalLockScope ls(&lock_);
+ sessions()->push_back(this);
+ }
SignalSrtpError.repeat(srtp_stat_->SignalSrtpError);
}
SrtpSession::~SrtpSession() {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
+ {
+ rtc::GlobalLockScope ls(&lock_);
+ sessions()->erase(std::find(sessions()->begin(), sessions()->end(), this));
+ }
if (session_) {
- session_->user_data = nullptr;
srtp_dealloc(session_);
}
}
@@ -510,7 +516,6 @@
}
bool SrtpSession::ProtectRtp(void* p, int in_len, int max_len, int* out_len) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!session_) {
LOG(LS_WARNING) << "Failed to protect SRTP packet: no SRTP Session";
return false;
@@ -553,7 +558,6 @@
}
bool SrtpSession::ProtectRtcp(void* p, int in_len, int max_len, int* out_len) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!session_) {
LOG(LS_WARNING) << "Failed to protect SRTCP packet: no SRTP Session";
return false;
@@ -577,7 +581,6 @@
}
bool SrtpSession::UnprotectRtp(void* p, int in_len, int* out_len) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!session_) {
LOG(LS_WARNING) << "Failed to unprotect SRTP packet: no SRTP Session";
return false;
@@ -597,7 +600,6 @@
}
bool SrtpSession::UnprotectRtcp(void* p, int in_len, int* out_len) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!session_) {
LOG(LS_WARNING) << "Failed to unprotect SRTCP packet: no SRTP Session";
return false;
@@ -615,7 +617,6 @@
bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) {
#if defined(ENABLE_EXTERNAL_AUTH)
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
ExternalHmacContext* external_hmac = NULL;
// stream_template will be the reference context for other streams.
// Let's use it for getting the keys.
@@ -642,7 +643,6 @@
bool SrtpSession::GetSendStreamPacketIndex(void* p,
int in_len,
int64_t* index) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
srtp_hdr_t* hdr = reinterpret_cast<srtp_hdr_t*>(p);
srtp_stream_ctx_t* stream = srtp_get_stream(session_, hdr->ssrc);
if (stream == NULL)
@@ -662,7 +662,6 @@
const std::string& cs,
const uint8_t* key,
int len) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (session_) {
LOG(LS_ERROR) << "Failed to create SRTP session: "
<< "SRTP session already created";
@@ -718,7 +717,7 @@
return false;
}
- session_->user_data = this;
+
rtp_auth_tag_len_ = policy.rtp.auth_tag_len;
rtcp_auth_tag_len_ = policy.rtcp.auth_tag_len;
return true;
@@ -767,7 +766,6 @@
}
void SrtpSession::HandleEvent(const srtp_event_data_t* ev) {
- RTC_DCHECK(thread_checker_.CalledOnValidThread());
switch (ev->event) {
case event_ssrc_collision:
LOG(LS_INFO) << "SRTP event: SSRC collision";
@@ -788,12 +786,20 @@
}
void SrtpSession::HandleEventThunk(srtp_event_data_t* ev) {
- // Callback will be executed from same thread that calls the "srtp_protect"
- // and "srtp_unprotect" functions.
- SrtpSession* session = static_cast<SrtpSession*>(ev->session->user_data);
- if (session) {
- session->HandleEvent(ev);
- }
+ rtc::GlobalLockScope ls(&lock_);
+
+ for (std::list<SrtpSession*>::iterator it = sessions()->begin();
+ it != sessions()->end(); ++it) {
+ if ((*it)->session_ == ev->session) {
+ (*it)->HandleEvent(ev);
+ break;
+ }
+ }
+}
+
+std::list<SrtpSession*>* SrtpSession::sessions() {
+ RTC_DEFINE_STATIC_LOCAL(std::list<SrtpSession*>, sessions, ());
+ return &sessions;
}
#else // !HAVE_SRTP
« no previous file with comments | « talk/session/media/srtpfilter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698