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

Side by Side Diff: webrtc/pc/channel.cc

Issue 2537343003: Removing "crypto_required" from MediaContentDescription. (Closed)
Patch Set: Merge with master and clean up CreateDataChannel Created 4 years 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 unified diff | Download patch
« no previous file with comments | « webrtc/pc/channel.h ('k') | webrtc/pc/channel_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 RtpSendParameters<Codec>* send_params) { 157 RtpSendParameters<Codec>* send_params) {
158 RtpParametersFromMediaDescription(desc, send_params); 158 RtpParametersFromMediaDescription(desc, send_params);
159 send_params->max_bandwidth_bps = desc->bandwidth(); 159 send_params->max_bandwidth_bps = desc->bandwidth();
160 } 160 }
161 161
162 BaseChannel::BaseChannel(rtc::Thread* worker_thread, 162 BaseChannel::BaseChannel(rtc::Thread* worker_thread,
163 rtc::Thread* network_thread, 163 rtc::Thread* network_thread,
164 MediaChannel* media_channel, 164 MediaChannel* media_channel,
165 TransportController* transport_controller, 165 TransportController* transport_controller,
166 const std::string& content_name, 166 const std::string& content_name,
167 bool rtcp) 167 bool rtcp,
168 bool srtp_required)
168 : worker_thread_(worker_thread), 169 : worker_thread_(worker_thread),
169 network_thread_(network_thread), 170 network_thread_(network_thread),
170 171
171 content_name_(content_name), 172 content_name_(content_name),
172 173
173 transport_controller_(transport_controller), 174 transport_controller_(transport_controller),
174 rtcp_enabled_(rtcp), 175 rtcp_enabled_(rtcp),
176 srtp_required_(srtp_required),
175 media_channel_(media_channel), 177 media_channel_(media_channel),
176 selected_candidate_pair_(nullptr) { 178 selected_candidate_pair_(nullptr) {
177 RTC_DCHECK(worker_thread_ == rtc::Thread::Current()); 179 RTC_DCHECK(worker_thread_ == rtc::Thread::Current());
178 if (transport_controller) { 180 if (transport_controller) {
179 RTC_DCHECK_EQ(network_thread, transport_controller->network_thread()); 181 RTC_DCHECK_EQ(network_thread, transport_controller->network_thread());
180 } 182 }
181 LOG(LS_INFO) << "Created channel for " << content_name; 183 LOG(LS_INFO) << "Created channel for " << content_name;
182 } 184 }
183 185
184 BaseChannel::~BaseChannel() { 186 BaseChannel::~BaseChannel() {
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 int type = -1; 721 int type = -1;
720 GetRtcpType(data, len, &type); 722 GetRtcpType(data, len, &type);
721 LOG(LS_ERROR) << "Failed to protect " << content_name_ 723 LOG(LS_ERROR) << "Failed to protect " << content_name_
722 << " RTCP packet: size=" << len << ", type=" << type; 724 << " RTCP packet: size=" << len << ", type=" << type;
723 return false; 725 return false;
724 } 726 }
725 } 727 }
726 728
727 // Update the length of the packet now that we've added the auth tag. 729 // Update the length of the packet now that we've added the auth tag.
728 packet->SetSize(len); 730 packet->SetSize(len);
729 } else if (secure_required_) { 731 } else if (srtp_required_) {
730 // The audio/video engines may attempt to send RTCP packets as soon as the 732 // The audio/video engines may attempt to send RTCP packets as soon as the
731 // streams are created, so don't treat this as an error for RTCP. 733 // streams are created, so don't treat this as an error for RTCP.
732 // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=6809 734 // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=6809
733 if (rtcp) { 735 if (rtcp) {
734 return false; 736 return false;
735 } 737 }
736 // However, there shouldn't be any RTP packets sent before SRTP is set up 738 // However, there shouldn't be any RTP packets sent before SRTP is set up
737 // (and SetSend(true) is called). 739 // (and SetSend(true) is called).
738 LOG(LS_ERROR) << "Can't send outgoing RTP packet when SRTP is inactive" 740 LOG(LS_ERROR) << "Can't send outgoing RTP packet when SRTP is inactive"
739 << " and crypto is required"; 741 << " and crypto is required";
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 if (!res) { 810 if (!res) {
809 int type = -1; 811 int type = -1;
810 GetRtcpType(data, len, &type); 812 GetRtcpType(data, len, &type);
811 LOG(LS_ERROR) << "Failed to unprotect " << content_name_ 813 LOG(LS_ERROR) << "Failed to unprotect " << content_name_
812 << " RTCP packet: size=" << len << ", type=" << type; 814 << " RTCP packet: size=" << len << ", type=" << type;
813 return; 815 return;
814 } 816 }
815 } 817 }
816 818
817 packet->SetSize(len); 819 packet->SetSize(len);
818 } else if (secure_required_) { 820 } else if (srtp_required_) {
819 // Our session description indicates that SRTP is required, but we got a 821 // Our session description indicates that SRTP is required, but we got a
820 // packet before our SRTP filter is active. This means either that 822 // packet before our SRTP filter is active. This means either that
821 // a) we got SRTP packets before we received the SDES keys, in which case 823 // a) we got SRTP packets before we received the SDES keys, in which case
822 // we can't decrypt it anyway, or 824 // we can't decrypt it anyway, or
823 // b) we got SRTP packets before DTLS completed on both the RTP and RTCP 825 // b) we got SRTP packets before DTLS completed on both the RTP and RTCP
824 // channels, so we haven't yet extracted keys, even if DTLS did complete 826 // channels, so we haven't yet extracted keys, even if DTLS did complete
825 // on the channel that the packets are being sent on. It's really good 827 // on the channel that the packets are being sent on. It's really good
826 // practice to wait for both RTP and RTCP to be good to go before sending 828 // practice to wait for both RTP and RTCP to be good to go before sending
827 // media, to prevent weird failure modes, so it's fine for us to just eat 829 // media, to prevent weird failure modes, so it's fine for us to just eat
828 // packets here. This is all sidestepped if RTCP mux is used anyway. 830 // packets here. This is all sidestepped if RTCP mux is used anyway.
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 bool BaseChannel::SetRtpTransportParameters( 1086 bool BaseChannel::SetRtpTransportParameters(
1085 const MediaContentDescription* content, 1087 const MediaContentDescription* content,
1086 ContentAction action, 1088 ContentAction action,
1087 ContentSource src, 1089 ContentSource src,
1088 std::string* error_desc) { 1090 std::string* error_desc) {
1089 if (action == CA_UPDATE) { 1091 if (action == CA_UPDATE) {
1090 // These parameters never get changed by a CA_UDPATE. 1092 // These parameters never get changed by a CA_UDPATE.
1091 return true; 1093 return true;
1092 } 1094 }
1093 1095
1094 // Cache secure_required_ for belt and suspenders check on SendPacket 1096 // Cache srtp_required_ for belt and suspenders check on SendPacket
1095 return network_thread_->Invoke<bool>( 1097 return network_thread_->Invoke<bool>(
1096 RTC_FROM_HERE, Bind(&BaseChannel::SetRtpTransportParameters_n, this, 1098 RTC_FROM_HERE, Bind(&BaseChannel::SetRtpTransportParameters_n, this,
1097 content, action, src, error_desc)); 1099 content, action, src, error_desc));
1098 } 1100 }
1099 1101
1100 bool BaseChannel::SetRtpTransportParameters_n( 1102 bool BaseChannel::SetRtpTransportParameters_n(
1101 const MediaContentDescription* content, 1103 const MediaContentDescription* content,
1102 ContentAction action, 1104 ContentAction action,
1103 ContentSource src, 1105 ContentSource src,
1104 std::string* error_desc) { 1106 std::string* error_desc) {
1105 RTC_DCHECK(network_thread_->IsCurrent()); 1107 RTC_DCHECK(network_thread_->IsCurrent());
1106 1108
1107 if (src == CS_LOCAL) {
1108 set_secure_required(content->crypto_required() != CT_NONE);
1109 }
1110
1111 if (!SetSrtp_n(content->cryptos(), action, src, error_desc)) { 1109 if (!SetSrtp_n(content->cryptos(), action, src, error_desc)) {
1112 return false; 1110 return false;
1113 } 1111 }
1114 1112
1115 if (!SetRtcpMux_n(content->rtcp_mux(), action, src, error_desc)) { 1113 if (!SetRtcpMux_n(content->rtcp_mux(), action, src, error_desc)) {
1116 return false; 1114 return false;
1117 } 1115 }
1118 1116
1119 return true; 1117 return true;
1120 } 1118 }
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 RTC_DCHECK(worker_thread_->IsCurrent()); 1467 RTC_DCHECK(worker_thread_->IsCurrent());
1470 SignalSentPacket(sent_packet); 1468 SignalSentPacket(sent_packet);
1471 } 1469 }
1472 1470
1473 VoiceChannel::VoiceChannel(rtc::Thread* worker_thread, 1471 VoiceChannel::VoiceChannel(rtc::Thread* worker_thread,
1474 rtc::Thread* network_thread, 1472 rtc::Thread* network_thread,
1475 MediaEngineInterface* media_engine, 1473 MediaEngineInterface* media_engine,
1476 VoiceMediaChannel* media_channel, 1474 VoiceMediaChannel* media_channel,
1477 TransportController* transport_controller, 1475 TransportController* transport_controller,
1478 const std::string& content_name, 1476 const std::string& content_name,
1479 bool rtcp) 1477 bool rtcp,
1478 bool srtp_required)
1480 : BaseChannel(worker_thread, 1479 : BaseChannel(worker_thread,
1481 network_thread, 1480 network_thread,
1482 media_channel, 1481 media_channel,
1483 transport_controller, 1482 transport_controller,
1484 content_name, 1483 content_name,
1485 rtcp), 1484 rtcp,
1485 srtp_required),
1486 media_engine_(media_engine), 1486 media_engine_(media_engine),
1487 received_media_(false) {} 1487 received_media_(false) {}
1488 1488
1489 VoiceChannel::~VoiceChannel() { 1489 VoiceChannel::~VoiceChannel() {
1490 TRACE_EVENT0("webrtc", "VoiceChannel::~VoiceChannel"); 1490 TRACE_EVENT0("webrtc", "VoiceChannel::~VoiceChannel");
1491 StopAudioMonitor(); 1491 StopAudioMonitor();
1492 StopMediaMonitor(); 1492 StopMediaMonitor();
1493 // this can't be done in the base class, since it calls a virtual 1493 // this can't be done in the base class, since it calls a virtual
1494 DisableMedia_w(); 1494 DisableMedia_w();
1495 Deinit(); 1495 Deinit();
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 void VoiceChannel::GetSrtpCryptoSuites_n( 1882 void VoiceChannel::GetSrtpCryptoSuites_n(
1883 std::vector<int>* crypto_suites) const { 1883 std::vector<int>* crypto_suites) const {
1884 GetSupportedAudioCryptoSuites(crypto_options(), crypto_suites); 1884 GetSupportedAudioCryptoSuites(crypto_options(), crypto_suites);
1885 } 1885 }
1886 1886
1887 VideoChannel::VideoChannel(rtc::Thread* worker_thread, 1887 VideoChannel::VideoChannel(rtc::Thread* worker_thread,
1888 rtc::Thread* network_thread, 1888 rtc::Thread* network_thread,
1889 VideoMediaChannel* media_channel, 1889 VideoMediaChannel* media_channel,
1890 TransportController* transport_controller, 1890 TransportController* transport_controller,
1891 const std::string& content_name, 1891 const std::string& content_name,
1892 bool rtcp) 1892 bool rtcp,
1893 bool srtp_required)
1893 : BaseChannel(worker_thread, 1894 : BaseChannel(worker_thread,
1894 network_thread, 1895 network_thread,
1895 media_channel, 1896 media_channel,
1896 transport_controller, 1897 transport_controller,
1897 content_name, 1898 content_name,
1898 rtcp) {} 1899 rtcp,
1900 srtp_required) {}
1899 1901
1900 bool VideoChannel::Init_w(const std::string* bundle_transport_name) { 1902 bool VideoChannel::Init_w(const std::string* bundle_transport_name) {
1901 if (!BaseChannel::Init_w(bundle_transport_name)) { 1903 if (!BaseChannel::Init_w(bundle_transport_name)) {
1902 return false; 1904 return false;
1903 } 1905 }
1904 return true; 1906 return true;
1905 } 1907 }
1906 1908
1907 VideoChannel::~VideoChannel() { 1909 VideoChannel::~VideoChannel() {
1908 TRACE_EVENT0("webrtc", "VideoChannel::~VideoChannel"); 1910 TRACE_EVENT0("webrtc", "VideoChannel::~VideoChannel");
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 void VideoChannel::GetSrtpCryptoSuites_n( 2145 void VideoChannel::GetSrtpCryptoSuites_n(
2144 std::vector<int>* crypto_suites) const { 2146 std::vector<int>* crypto_suites) const {
2145 GetSupportedVideoCryptoSuites(crypto_options(), crypto_suites); 2147 GetSupportedVideoCryptoSuites(crypto_options(), crypto_suites);
2146 } 2148 }
2147 2149
2148 DataChannel::DataChannel(rtc::Thread* worker_thread, 2150 DataChannel::DataChannel(rtc::Thread* worker_thread,
2149 rtc::Thread* network_thread, 2151 rtc::Thread* network_thread,
2150 DataMediaChannel* media_channel, 2152 DataMediaChannel* media_channel,
2151 TransportController* transport_controller, 2153 TransportController* transport_controller,
2152 const std::string& content_name, 2154 const std::string& content_name,
2153 bool rtcp) 2155 bool rtcp,
2156 bool srtp_required)
2154 : BaseChannel(worker_thread, 2157 : BaseChannel(worker_thread,
2155 network_thread, 2158 network_thread,
2156 media_channel, 2159 media_channel,
2157 transport_controller, 2160 transport_controller,
2158 content_name, 2161 content_name,
2159 rtcp), 2162 rtcp,
2163 srtp_required),
2160 data_channel_type_(cricket::DCT_NONE), 2164 data_channel_type_(cricket::DCT_NONE),
2161 ready_to_send_data_(false) {} 2165 ready_to_send_data_(false) {}
2162 2166
2163 DataChannel::~DataChannel() { 2167 DataChannel::~DataChannel() {
2164 TRACE_EVENT0("webrtc", "DataChannel::~DataChannel"); 2168 TRACE_EVENT0("webrtc", "DataChannel::~DataChannel");
2165 StopMediaMonitor(); 2169 StopMediaMonitor();
2166 // this can't be done in the base class, since it calls a virtual 2170 // this can't be done in the base class, since it calls a virtual
2167 DisableMedia_w(); 2171 DisableMedia_w();
2168 2172
2169 Deinit(); 2173 Deinit();
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
2463 } 2467 }
2464 2468
2465 void DataChannel::OnStreamClosedRemotely(uint32_t sid) { 2469 void DataChannel::OnStreamClosedRemotely(uint32_t sid) {
2466 rtc::TypedMessageData<uint32_t>* message = 2470 rtc::TypedMessageData<uint32_t>* message =
2467 new rtc::TypedMessageData<uint32_t>(sid); 2471 new rtc::TypedMessageData<uint32_t>(sid);
2468 signaling_thread()->Post(RTC_FROM_HERE, this, MSG_STREAMCLOSEDREMOTELY, 2472 signaling_thread()->Post(RTC_FROM_HERE, this, MSG_STREAMCLOSEDREMOTELY,
2469 message); 2473 message);
2470 } 2474 }
2471 2475
2472 } // namespace cricket 2476 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/pc/channel.h ('k') | webrtc/pc/channel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698