| OLD | NEW |
| 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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 dtls_keyed_(false), | 166 dtls_keyed_(false), |
| 167 secure_required_(false), | 167 secure_required_(false), |
| 168 rtp_abs_sendtime_extn_id_(-1), | 168 rtp_abs_sendtime_extn_id_(-1), |
| 169 | 169 |
| 170 media_channel_(media_channel), | 170 media_channel_(media_channel), |
| 171 enabled_(false), | 171 enabled_(false), |
| 172 local_content_direction_(MD_INACTIVE), | 172 local_content_direction_(MD_INACTIVE), |
| 173 remote_content_direction_(MD_INACTIVE) { | 173 remote_content_direction_(MD_INACTIVE) { |
| 174 ASSERT(worker_thread_ == rtc::Thread::Current()); | 174 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 175 if (transport_controller) { | 175 if (transport_controller) { |
| 176 RTC_DCHECK_EQ(network_thread, transport_controller->worker_thread()); | 176 RTC_DCHECK_EQ(network_thread, transport_controller->network_thread()); |
| 177 } | 177 } |
| 178 LOG(LS_INFO) << "Created channel for " << content_name; | 178 LOG(LS_INFO) << "Created channel for " << content_name; |
| 179 } | 179 } |
| 180 | 180 |
| 181 BaseChannel::~BaseChannel() { | 181 BaseChannel::~BaseChannel() { |
| 182 TRACE_EVENT0("webrtc", "BaseChannel::~BaseChannel"); | 182 TRACE_EVENT0("webrtc", "BaseChannel::~BaseChannel"); |
| 183 ASSERT(worker_thread_ == rtc::Thread::Current()); | 183 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 184 Deinit(); | 184 Deinit(); |
| 185 StopConnectionMonitor(); | 185 StopConnectionMonitor(); |
| 186 // Send any outstanding RTCP packets. | 186 // Send any outstanding RTCP packets. |
| 187 network_thread_->Invoke<void>(Bind(&BaseChannel::FlushRtcpMessages_n, this)); | 187 network_thread_->Invoke<void>(Bind(&BaseChannel::FlushRtcpMessages_n, this)); |
| 188 // Eats any outstanding messages or packets. | 188 // Eats any outstanding messages or packets. |
| 189 worker_thread_->Clear(&invoker_); | 189 worker_thread_->Clear(&invoker_); |
| 190 worker_thread_->Clear(this); | 190 worker_thread_->Clear(this); |
| 191 // We must destroy the media channel before the transport channel, otherwise | 191 // We must destroy the media channel before the transport channel, otherwise |
| 192 // the media channel may try to send on the dead transport channel. NULLing | 192 // the media channel may try to send on the dead transport channel. NULLing |
| 193 // is not an effective strategy since the sends will come on another thread. | 193 // is not an effective strategy since the sends will come on another thread. |
| 194 delete media_channel_; | 194 delete media_channel_; |
| 195 // Note that we don't just call SetTransportChannel_n(nullptr) because that | 195 // Note that we don't just call SetTransportChannel_n(nullptr) because that |
| 196 // would call a pure virtual method which we can't do from a destructor. | 196 // would call a pure virtual method which we can't do from a destructor. |
| 197 network_thread_->Invoke<void>(Bind(&BaseChannel::DeinitNetwork_n, this)); | 197 network_thread_->Invoke<void>(Bind(&BaseChannel::DeinitNetwork_n, this)); |
| 198 LOG(LS_INFO) << "Destroyed channel"; | 198 LOG(LS_INFO) << "Destroyed channel"; |
| 199 } | 199 } |
| 200 | 200 |
| 201 void BaseChannel::DeinitNetwork_n() { | 201 void BaseChannel::DeinitNetwork_n() { |
| 202 if (transport_channel_) { | 202 if (transport_channel_) { |
| 203 DisconnectFromTransportChannel(transport_channel_); | 203 DisconnectFromTransportChannel(transport_channel_); |
| 204 transport_controller_->DestroyTransportChannel_w( | 204 transport_controller_->DestroyTransportChannel_n( |
| 205 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 205 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 206 } | 206 } |
| 207 if (rtcp_transport_channel_) { | 207 if (rtcp_transport_channel_) { |
| 208 DisconnectFromTransportChannel(rtcp_transport_channel_); | 208 DisconnectFromTransportChannel(rtcp_transport_channel_); |
| 209 transport_controller_->DestroyTransportChannel_w( | 209 transport_controller_->DestroyTransportChannel_n( |
| 210 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 210 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
| 211 } | 211 } |
| 212 network_thread_->Clear(this); | 212 network_thread_->Clear(this); |
| 213 } | 213 } |
| 214 | 214 |
| 215 bool BaseChannel::Init_w() { | 215 bool BaseChannel::Init_w() { |
| 216 if (!network_thread_->Invoke<bool>(Bind(&BaseChannel::InitNetwork_n, this))) { | 216 if (!network_thread_->Invoke<bool>(Bind(&BaseChannel::InitNetwork_n, this))) { |
| 217 return false; | 217 return false; |
| 218 } | 218 } |
| 219 | 219 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 // DTLS-SRTP when the writable_ becomes true again. | 266 // DTLS-SRTP when the writable_ becomes true again. |
| 267 writable_ = false; | 267 writable_ = false; |
| 268 srtp_filter_.ResetParams(); | 268 srtp_filter_.ResetParams(); |
| 269 } | 269 } |
| 270 | 270 |
| 271 // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. | 271 // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. |
| 272 if (rtcp_transport_enabled()) { | 272 if (rtcp_transport_enabled()) { |
| 273 LOG(LS_INFO) << "Create RTCP TransportChannel for " << content_name() | 273 LOG(LS_INFO) << "Create RTCP TransportChannel for " << content_name() |
| 274 << " on " << transport_name << " transport "; | 274 << " on " << transport_name << " transport "; |
| 275 SetRtcpTransportChannel_n( | 275 SetRtcpTransportChannel_n( |
| 276 transport_controller_->CreateTransportChannel_w( | 276 transport_controller_->CreateTransportChannel_n( |
| 277 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP), | 277 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP), |
| 278 false /* update_writablity */); | 278 false /* update_writablity */); |
| 279 if (!rtcp_transport_channel_) { | 279 if (!rtcp_transport_channel_) { |
| 280 return false; | 280 return false; |
| 281 } | 281 } |
| 282 } | 282 } |
| 283 | 283 |
| 284 // We're not updating the writablity during the transition state. | 284 // We're not updating the writablity during the transition state. |
| 285 SetTransportChannel_n(transport_controller_->CreateTransportChannel_w( | 285 SetTransportChannel_n(transport_controller_->CreateTransportChannel_n( |
| 286 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP)); | 286 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
| 287 if (!transport_channel_) { | 287 if (!transport_channel_) { |
| 288 return false; | 288 return false; |
| 289 } | 289 } |
| 290 | 290 |
| 291 // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. | 291 // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. |
| 292 if (rtcp_transport_enabled()) { | 292 if (rtcp_transport_enabled()) { |
| 293 // We can only update the RTCP ready to send after set_transport_channel has | 293 // We can only update the RTCP ready to send after set_transport_channel has |
| 294 // handled channel writability. | 294 // handled channel writability. |
| 295 SetReadyToSend( | 295 SetReadyToSend( |
| 296 true, rtcp_transport_channel_ && rtcp_transport_channel_->writable()); | 296 true, rtcp_transport_channel_ && rtcp_transport_channel_->writable()); |
| 297 } | 297 } |
| 298 transport_name_ = transport_name; | 298 transport_name_ = transport_name; |
| 299 return true; | 299 return true; |
| 300 } | 300 } |
| 301 | 301 |
| 302 void BaseChannel::SetTransportChannel_n(TransportChannel* new_tc) { | 302 void BaseChannel::SetTransportChannel_n(TransportChannel* new_tc) { |
| 303 RTC_DCHECK(network_thread_->IsCurrent()); | 303 RTC_DCHECK(network_thread_->IsCurrent()); |
| 304 | 304 |
| 305 TransportChannel* old_tc = transport_channel_; | 305 TransportChannel* old_tc = transport_channel_; |
| 306 if (!old_tc && !new_tc) { | 306 if (!old_tc && !new_tc) { |
| 307 // Nothing to do | 307 // Nothing to do |
| 308 return; | 308 return; |
| 309 } | 309 } |
| 310 ASSERT(old_tc != new_tc); | 310 ASSERT(old_tc != new_tc); |
| 311 | 311 |
| 312 if (old_tc) { | 312 if (old_tc) { |
| 313 DisconnectFromTransportChannel(old_tc); | 313 DisconnectFromTransportChannel(old_tc); |
| 314 transport_controller_->DestroyTransportChannel_w( | 314 transport_controller_->DestroyTransportChannel_n( |
| 315 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 315 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 316 } | 316 } |
| 317 | 317 |
| 318 transport_channel_ = new_tc; | 318 transport_channel_ = new_tc; |
| 319 | 319 |
| 320 if (new_tc) { | 320 if (new_tc) { |
| 321 ConnectToTransportChannel(new_tc); | 321 ConnectToTransportChannel(new_tc); |
| 322 for (const auto& pair : socket_options_) { | 322 for (const auto& pair : socket_options_) { |
| 323 new_tc->SetOption(pair.first, pair.second); | 323 new_tc->SetOption(pair.first, pair.second); |
| 324 } | 324 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 336 | 336 |
| 337 TransportChannel* old_tc = rtcp_transport_channel_; | 337 TransportChannel* old_tc = rtcp_transport_channel_; |
| 338 if (!old_tc && !new_tc) { | 338 if (!old_tc && !new_tc) { |
| 339 // Nothing to do | 339 // Nothing to do |
| 340 return; | 340 return; |
| 341 } | 341 } |
| 342 ASSERT(old_tc != new_tc); | 342 ASSERT(old_tc != new_tc); |
| 343 | 343 |
| 344 if (old_tc) { | 344 if (old_tc) { |
| 345 DisconnectFromTransportChannel(old_tc); | 345 DisconnectFromTransportChannel(old_tc); |
| 346 transport_controller_->DestroyTransportChannel_w( | 346 transport_controller_->DestroyTransportChannel_n( |
| 347 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 347 transport_name_, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
| 348 } | 348 } |
| 349 | 349 |
| 350 rtcp_transport_channel_ = new_tc; | 350 rtcp_transport_channel_ = new_tc; |
| 351 | 351 |
| 352 if (new_tc) { | 352 if (new_tc) { |
| 353 RTC_CHECK(!(ShouldSetupDtlsSrtp_n() && srtp_filter_.IsActive())) | 353 RTC_CHECK(!(ShouldSetupDtlsSrtp_n() && srtp_filter_.IsActive())) |
| 354 << "Setting RTCP for DTLS/SRTP after SrtpFilter is active " | 354 << "Setting RTCP for DTLS/SRTP after SrtpFilter is active " |
| 355 << "should never happen."; | 355 << "should never happen."; |
| 356 ConnectToTransportChannel(new_tc); | 356 ConnectToTransportChannel(new_tc); |
| (...skipping 1966 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2323 return data_channel_type_ == DCT_RTP && BaseChannel::ShouldSetupDtlsSrtp_n(); | 2323 return data_channel_type_ == DCT_RTP && BaseChannel::ShouldSetupDtlsSrtp_n(); |
| 2324 } | 2324 } |
| 2325 | 2325 |
| 2326 void DataChannel::OnStreamClosedRemotely(uint32_t sid) { | 2326 void DataChannel::OnStreamClosedRemotely(uint32_t sid) { |
| 2327 rtc::TypedMessageData<uint32_t>* message = | 2327 rtc::TypedMessageData<uint32_t>* message = |
| 2328 new rtc::TypedMessageData<uint32_t>(sid); | 2328 new rtc::TypedMessageData<uint32_t>(sid); |
| 2329 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message); | 2329 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message); |
| 2330 } | 2330 } |
| 2331 | 2331 |
| 2332 } // namespace cricket | 2332 } // namespace cricket |
| OLD | NEW |