OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 } | 120 } |
121 | 121 |
122 bool TransportController::AddRemoteCandidates(const std::string& transport_name, | 122 bool TransportController::AddRemoteCandidates(const std::string& transport_name, |
123 const Candidates& candidates, | 123 const Candidates& candidates, |
124 std::string* err) { | 124 std::string* err) { |
125 return worker_thread_->Invoke<bool>( | 125 return worker_thread_->Invoke<bool>( |
126 rtc::Bind(&TransportController::AddRemoteCandidates_w, this, | 126 rtc::Bind(&TransportController::AddRemoteCandidates_w, this, |
127 transport_name, candidates, err)); | 127 transport_name, candidates, err)); |
128 } | 128 } |
129 | 129 |
| 130 bool TransportController::RemoveRemoteCandidates(const Candidates& candidates, |
| 131 std::string* err) { |
| 132 return worker_thread_->Invoke<bool>(rtc::Bind( |
| 133 &TransportController::RemoveRemoteCandidates_w, this, candidates, err)); |
| 134 } |
| 135 |
130 bool TransportController::ReadyForRemoteCandidates( | 136 bool TransportController::ReadyForRemoteCandidates( |
131 const std::string& transport_name) { | 137 const std::string& transport_name) { |
132 return worker_thread_->Invoke<bool>(rtc::Bind( | 138 return worker_thread_->Invoke<bool>(rtc::Bind( |
133 &TransportController::ReadyForRemoteCandidates_w, this, transport_name)); | 139 &TransportController::ReadyForRemoteCandidates_w, this, transport_name)); |
134 } | 140 } |
135 | 141 |
136 bool TransportController::GetStats(const std::string& transport_name, | 142 bool TransportController::GetStats(const std::string& transport_name, |
137 TransportStats* stats) { | 143 TransportStats* stats) { |
138 return worker_thread_->Invoke<bool>( | 144 return worker_thread_->Invoke<bool>( |
139 rtc::Bind(&TransportController::GetStats_w, this, transport_name, stats)); | 145 rtc::Bind(&TransportController::GetStats_w, this, transport_name, stats)); |
(...skipping 15 matching lines...) Expand all Loading... |
155 Transport* transport = GetOrCreateTransport_w(transport_name); | 161 Transport* transport = GetOrCreateTransport_w(transport_name); |
156 TransportChannelImpl* channel = transport->CreateChannel(component); | 162 TransportChannelImpl* channel = transport->CreateChannel(component); |
157 channel->SignalWritableState.connect( | 163 channel->SignalWritableState.connect( |
158 this, &TransportController::OnChannelWritableState_w); | 164 this, &TransportController::OnChannelWritableState_w); |
159 channel->SignalReceivingState.connect( | 165 channel->SignalReceivingState.connect( |
160 this, &TransportController::OnChannelReceivingState_w); | 166 this, &TransportController::OnChannelReceivingState_w); |
161 channel->SignalGatheringState.connect( | 167 channel->SignalGatheringState.connect( |
162 this, &TransportController::OnChannelGatheringState_w); | 168 this, &TransportController::OnChannelGatheringState_w); |
163 channel->SignalCandidateGathered.connect( | 169 channel->SignalCandidateGathered.connect( |
164 this, &TransportController::OnChannelCandidateGathered_w); | 170 this, &TransportController::OnChannelCandidateGathered_w); |
| 171 channel->SignalCandidatesRemoved.connect( |
| 172 this, &TransportController::OnChannelCandidatesRemoved_w); |
165 channel->SignalRoleConflict.connect( | 173 channel->SignalRoleConflict.connect( |
166 this, &TransportController::OnChannelRoleConflict_w); | 174 this, &TransportController::OnChannelRoleConflict_w); |
167 channel->SignalConnectionRemoved.connect( | 175 channel->SignalConnectionRemoved.connect( |
168 this, &TransportController::OnChannelConnectionRemoved_w); | 176 this, &TransportController::OnChannelConnectionRemoved_w); |
169 channels_.insert(channels_.end(), RefCountedChannel(channel))->AddRef(); | 177 channels_.insert(channels_.end(), RefCountedChannel(channel))->AddRef(); |
170 // Adding a channel could cause aggregate state to change. | 178 // Adding a channel could cause aggregate state to change. |
171 UpdateAggregateStates_w(); | 179 UpdateAggregateStates_w(); |
172 return channel; | 180 return channel; |
173 } | 181 } |
174 | 182 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 Transport* transport = GetTransport_w(transport_name); | 461 Transport* transport = GetTransport_w(transport_name); |
454 if (!transport) { | 462 if (!transport) { |
455 // If we didn't find a transport, that's not an error; | 463 // If we didn't find a transport, that's not an error; |
456 // it could have been deleted as a result of bundling. | 464 // it could have been deleted as a result of bundling. |
457 return true; | 465 return true; |
458 } | 466 } |
459 | 467 |
460 return transport->AddRemoteCandidates(candidates, err); | 468 return transport->AddRemoteCandidates(candidates, err); |
461 } | 469 } |
462 | 470 |
| 471 bool TransportController::RemoveRemoteCandidates_w(const Candidates& candidates, |
| 472 std::string* err) { |
| 473 RTC_DCHECK(worker_thread()->IsCurrent()); |
| 474 std::map<std::string, Candidates> candidates_by_transport_name; |
| 475 for (const Candidate& cand : candidates) { |
| 476 RTC_DCHECK(!cand.transport_name().empty()); |
| 477 candidates_by_transport_name[cand.transport_name()].push_back(cand); |
| 478 } |
| 479 |
| 480 bool result = true; |
| 481 for (auto kv : candidates_by_transport_name) { |
| 482 Transport* transport = GetTransport_w(kv.first); |
| 483 if (!transport) { |
| 484 // If we didn't find a transport, that's not an error; |
| 485 // it could have been deleted as a result of bundling. |
| 486 continue; |
| 487 } |
| 488 result &= transport->RemoveRemoteCandidates(kv.second, err); |
| 489 } |
| 490 return result; |
| 491 } |
| 492 |
463 bool TransportController::ReadyForRemoteCandidates_w( | 493 bool TransportController::ReadyForRemoteCandidates_w( |
464 const std::string& transport_name) { | 494 const std::string& transport_name) { |
465 RTC_DCHECK(worker_thread()->IsCurrent()); | 495 RTC_DCHECK(worker_thread()->IsCurrent()); |
466 | 496 |
467 Transport* transport = GetTransport_w(transport_name); | 497 Transport* transport = GetTransport_w(transport_name); |
468 if (!transport) { | 498 if (!transport) { |
469 return false; | 499 return false; |
470 } | 500 } |
471 return transport->ready_for_remote_candidates(); | 501 return transport->ready_for_remote_candidates(); |
472 } | 502 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 RTC_DCHECK(false); | 541 RTC_DCHECK(false); |
512 return; | 542 return; |
513 } | 543 } |
514 std::vector<Candidate> candidates; | 544 std::vector<Candidate> candidates; |
515 candidates.push_back(candidate); | 545 candidates.push_back(candidate); |
516 CandidatesData* data = | 546 CandidatesData* data = |
517 new CandidatesData(channel->transport_name(), candidates); | 547 new CandidatesData(channel->transport_name(), candidates); |
518 signaling_thread_->Post(this, MSG_CANDIDATESGATHERED, data); | 548 signaling_thread_->Post(this, MSG_CANDIDATESGATHERED, data); |
519 } | 549 } |
520 | 550 |
| 551 void TransportController::OnChannelCandidatesRemoved_w( |
| 552 TransportChannelImpl* channel, |
| 553 const Candidates& candidates) { |
| 554 invoker_.AsyncInvoke<void>( |
| 555 signaling_thread_, |
| 556 rtc::Bind(&TransportController::OnChannelCandidatesRemoved, this, |
| 557 candidates)); |
| 558 } |
| 559 |
| 560 void TransportController::OnChannelCandidatesRemoved( |
| 561 const Candidates& candidates) { |
| 562 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 563 SignalCandidatesRemoved(candidates); |
| 564 } |
| 565 |
521 void TransportController::OnChannelRoleConflict_w( | 566 void TransportController::OnChannelRoleConflict_w( |
522 TransportChannelImpl* channel) { | 567 TransportChannelImpl* channel) { |
523 RTC_DCHECK(worker_thread_->IsCurrent()); | 568 RTC_DCHECK(worker_thread_->IsCurrent()); |
524 | 569 |
525 if (ice_role_switch_) { | 570 if (ice_role_switch_) { |
526 LOG(LS_WARNING) | 571 LOG(LS_WARNING) |
527 << "Repeat of role conflict signal from TransportChannelImpl."; | 572 << "Repeat of role conflict signal from TransportChannelImpl."; |
528 return; | 573 return; |
529 } | 574 } |
530 | 575 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 } | 645 } |
601 if (gathering_state_ != new_gathering_state) { | 646 if (gathering_state_ != new_gathering_state) { |
602 gathering_state_ = new_gathering_state; | 647 gathering_state_ = new_gathering_state; |
603 signaling_thread_->Post( | 648 signaling_thread_->Post( |
604 this, MSG_ICEGATHERINGSTATE, | 649 this, MSG_ICEGATHERINGSTATE, |
605 new rtc::TypedMessageData<IceGatheringState>(new_gathering_state)); | 650 new rtc::TypedMessageData<IceGatheringState>(new_gathering_state)); |
606 } | 651 } |
607 } | 652 } |
608 | 653 |
609 } // namespace cricket | 654 } // namespace cricket |
OLD | NEW |