Index: webrtc/p2p/base/transportcontroller.cc |
diff --git a/webrtc/p2p/base/transportcontroller.cc b/webrtc/p2p/base/transportcontroller.cc |
index 053388eeb8130d30fec9a6fb5a21e94ec54a8b0a..d535f9214520a80bae104d5460dca5df11c466ac 100644 |
--- a/webrtc/p2p/base/transportcontroller.cc |
+++ b/webrtc/p2p/base/transportcontroller.cc |
@@ -127,6 +127,15 @@ bool TransportController::AddRemoteCandidates(const std::string& transport_name, |
transport_name, candidates, err)); |
} |
+bool TransportController::RemoveRemoteCandidates( |
+ const std::string& transport_name, |
+ const Candidates& candidates, |
+ std::string* err) { |
+ return worker_thread_->Invoke<bool>( |
+ rtc::Bind(&TransportController::RemoveRemoteCandidates_w, this, |
+ transport_name, candidates, err)); |
+} |
+ |
bool TransportController::ReadyForRemoteCandidates( |
const std::string& transport_name) { |
return worker_thread_->Invoke<bool>(rtc::Bind( |
@@ -162,6 +171,8 @@ TransportChannel* TransportController::CreateTransportChannel_w( |
this, &TransportController::OnChannelGatheringState_w); |
channel->SignalCandidateGathered.connect( |
this, &TransportController::OnChannelCandidateGathered_w); |
+ channel->SignalCandidatesRemoved.connect( |
+ this, &TransportController::OnChannelCandidatesRemoved_w); |
channel->SignalRoleConflict.connect( |
this, &TransportController::OnChannelRoleConflict_w); |
channel->SignalConnectionRemoved.connect( |
@@ -460,6 +471,22 @@ bool TransportController::AddRemoteCandidates_w( |
return transport->AddRemoteCandidates(candidates, err); |
} |
+bool TransportController::RemoveRemoteCandidates_w( |
+ const std::string& transport_name, |
+ const Candidates& candidates, |
+ std::string* err) { |
+ RTC_DCHECK(worker_thread()->IsCurrent()); |
+ |
+ Transport* transport = GetTransport_w(transport_name); |
+ if (!transport) { |
+ // If we didn't find a transport, that's not an error; |
+ // it could have been deleted as a result of bundling. |
+ return true; |
+ } |
+ |
+ return transport->RemoveRemoteCandidates(candidates, err); |
+} |
+ |
bool TransportController::ReadyForRemoteCandidates_w( |
const std::string& transport_name) { |
RTC_DCHECK(worker_thread()->IsCurrent()); |
@@ -518,6 +545,22 @@ void TransportController::OnChannelCandidateGathered_w( |
signaling_thread_->Post(this, MSG_CANDIDATESGATHERED, data); |
} |
+void TransportController::OnChannelCandidatesRemoved_w( |
+ TransportChannelImpl* channel, |
+ const Candidates& candidates) { |
+ invoker_.AsyncInvoke<void>( |
+ signaling_thread_, |
+ rtc::Bind(&TransportController::OnChannelCandidatesRemoved, this, |
+ channel->transport_name(), candidates)); |
+} |
+ |
+void TransportController::OnChannelCandidatesRemoved( |
+ const std::string& transport_name, |
+ const Candidates& candidates) { |
+ RTC_DCHECK(signaling_thread_->IsCurrent()); |
+ SignalCandidatesRemoved(transport_name, candidates); |
+} |
+ |
void TransportController::OnChannelRoleConflict_w( |
TransportChannelImpl* channel) { |
RTC_DCHECK(worker_thread_->IsCurrent()); |