Index: webrtc/pc/channel.cc |
diff --git a/webrtc/pc/channel.cc b/webrtc/pc/channel.cc |
index ecc1c9a633c6d4a935a146f048483256ccdc5d49..09a4d8360a927c6189620d53dfae5f4150058fec 100644 |
--- a/webrtc/pc/channel.cc |
+++ b/webrtc/pc/channel.cc |
@@ -43,20 +43,6 @@ struct SendPacketMessageData : public rtc::MessageData { |
rtc::PacketOptions options; |
}; |
-#if defined(ENABLE_EXTERNAL_AUTH) |
-// Returns the named header extension if found among all extensions, |
-// nullptr otherwise. |
-const webrtc::RtpExtension* FindHeaderExtension( |
- const std::vector<webrtc::RtpExtension>& extensions, |
- const std::string& uri) { |
- for (const auto& extension : extensions) { |
- if (extension.uri == uri) |
- return &extension; |
- } |
- return nullptr; |
-} |
-#endif |
- |
} // namespace |
enum { |
@@ -1150,26 +1136,39 @@ bool BaseChannel::SetRtpTransportParameters( |
const MediaContentDescription* content, |
ContentAction action, |
ContentSource src, |
+ const RtpHeaderExtensions& extensions, |
std::string* error_desc) { |
if (action == CA_UPDATE) { |
// These parameters never get changed by a CA_UDPATE. |
return true; |
} |
+ RtpHeaderExtensions encrypted_extensions; |
+ for (const webrtc::RtpExtension& extension : extensions) { |
+ if (extension.encrypt) { |
+ LOG(LS_INFO) << "Using " << src << " encrypted extension: " |
Taylor Brandstetter
2017/03/23 20:10:56
nit: "src" will print as "0" or "1" (I believe), w
joachim
2017/03/30 22:43:49
Done.
|
+ << extension.ToString(); |
+ encrypted_extensions.push_back(extension); |
+ } |
+ } |
+ |
// Cache srtp_required_ for belt and suspenders check on SendPacket |
return network_thread_->Invoke<bool>( |
RTC_FROM_HERE, Bind(&BaseChannel::SetRtpTransportParameters_n, this, |
- content, action, src, error_desc)); |
+ content, action, src, encrypted_extensions, |
+ error_desc)); |
} |
bool BaseChannel::SetRtpTransportParameters_n( |
const MediaContentDescription* content, |
ContentAction action, |
ContentSource src, |
+ const RtpHeaderExtensions& encrypted_extensions, |
std::string* error_desc) { |
RTC_DCHECK(network_thread_->IsCurrent()); |
- if (!SetSrtp_n(content->cryptos(), action, src, error_desc)) { |
+ if (!SetSrtp_n(content->cryptos(), action, src, encrypted_extensions, |
+ error_desc)) { |
return false; |
} |
@@ -1196,6 +1195,7 @@ bool BaseChannel::CheckSrtpConfig_n(const std::vector<CryptoParams>& cryptos, |
bool BaseChannel::SetSrtp_n(const std::vector<CryptoParams>& cryptos, |
ContentAction action, |
ContentSource src, |
+ const RtpHeaderExtensions& encrypted_extensions, |
std::string* error_desc) { |
TRACE_EVENT0("webrtc", "BaseChannel::SetSrtp_w"); |
if (action == CA_UPDATE) { |
@@ -1208,6 +1208,7 @@ bool BaseChannel::SetSrtp_n(const std::vector<CryptoParams>& cryptos, |
if (!ret) { |
return false; |
} |
+ srtp_filter_.SetEncryptedHeaderExtensions(src, encrypted_extensions); |
switch (action) { |
case CA_OFFER: |
// If DTLS is already active on the channel, we could be renegotiating |
@@ -1470,7 +1471,8 @@ void BaseChannel::MaybeCacheRtpAbsSendTimeHeaderExtension_w( |
// something that is not used. |
#if defined(ENABLE_EXTERNAL_AUTH) |
const webrtc::RtpExtension* send_time_extension = |
- FindHeaderExtension(extensions, webrtc::RtpExtension::kAbsSendTimeUri); |
+ webrtc::RtpExtension::FindHeaderExtensionByUri( |
+ extensions, webrtc::RtpExtension::kAbsSendTimeUri); |
int rtp_abs_sendtime_extn_id = |
send_time_extension ? send_time_extension->id : -1; |
invoker_.AsyncInvoke<void>( |
@@ -1804,7 +1806,8 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content, |
return false; |
} |
- if (!SetRtpTransportParameters(content, action, CS_LOCAL, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_LOCAL, |
+ audio->rtp_header_extensions(), error_desc)) { |
return false; |
} |
@@ -1849,7 +1852,8 @@ bool VoiceChannel::SetRemoteContent_w(const MediaContentDescription* content, |
return false; |
} |
- if (!SetRtpTransportParameters(content, action, CS_REMOTE, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_REMOTE, |
+ audio->rtp_header_extensions(), error_desc)) { |
return false; |
} |
@@ -2082,7 +2086,8 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content, |
return false; |
} |
- if (!SetRtpTransportParameters(content, action, CS_LOCAL, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_LOCAL, |
+ video->rtp_header_extensions(), error_desc)) { |
return false; |
} |
@@ -2127,7 +2132,8 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, |
return false; |
} |
- if (!SetRtpTransportParameters(content, action, CS_REMOTE, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_REMOTE, |
+ video->rtp_header_extensions(), error_desc)) { |
return false; |
} |
@@ -2282,7 +2288,8 @@ bool RtpDataChannel::SetLocalContent_w(const MediaContentDescription* content, |
return false; |
} |
- if (!SetRtpTransportParameters(content, action, CS_LOCAL, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_LOCAL, |
+ data->rtp_header_extensions(), error_desc)) { |
return false; |
} |
@@ -2337,7 +2344,8 @@ bool RtpDataChannel::SetRemoteContent_w(const MediaContentDescription* content, |
} |
LOG(LS_INFO) << "Setting remote data description"; |
- if (!SetRtpTransportParameters(content, action, CS_REMOTE, error_desc)) { |
+ if (!SetRtpTransportParameters(content, action, CS_REMOTE, |
+ data->rtp_header_extensions(), error_desc)) { |
return false; |
} |