void PeerConnectionMedia::StartIceChecks(const JsepSession& session) { std::vector<size_t> numComponentsByLevel; auto transports = session.GetTransports(); for (size_t i = 0; i < transports.size(); ++i) { RefPtr<JsepTransport> transport = transports[i]; if (transport->mState == JsepTransport::kJsepTransportClosed) { CSFLogDebug(logTag, "Transport %s is disabled", transport->mTransportId.c_str()); numComponentsByLevel.push_back(0); // Make sure the MediaPipelineFactory doesn't try to use these. RemoveTransportFlow(i, false); RemoveTransportFlow(i, true); } else { CSFLogDebug(logTag, "Transport %s has %u components", transport->mTransportId.c_str(), static_cast<unsigned>(transport->mComponents)); numComponentsByLevel.push_back(transport->mComponents); } } nsCOMPtr<nsIRunnable> runnable( WrapRunnable( RefPtr<PeerConnectionMedia>(this), &PeerConnectionMedia::StartIceChecks_s, session.IsIceControlling(), session.RemoteIsIceLite(), // Copy, just in case API changes to return a ref std::vector<std::string>(session.GetIceOptions()), numComponentsByLevel)); PerformOrEnqueueIceCtxOperation(runnable); }
void PeerConnectionMedia::EnsureTransports(const JsepSession& aSession) { auto transports = aSession.GetTransports(); for (size_t i = 0; i < transports.size(); ++i) { RefPtr<JsepTransport> transport = transports[i]; RUN_ON_THREAD( GetSTSThread(), WrapRunnable(RefPtr<PeerConnectionMedia>(this), &PeerConnectionMedia::EnsureTransport_s, i, transport->mComponents), NS_DISPATCH_NORMAL); } GatherIfReady(); }
void PeerConnectionMedia::ActivateOrRemoveTransports(const JsepSession& aSession) { auto transports = aSession.GetTransports(); for (size_t i = 0; i < transports.size(); ++i) { RefPtr<JsepTransport> transport = transports[i]; std::string ufrag; std::string pwd; std::vector<std::string> candidates; if (transport->mComponents) { MOZ_ASSERT(transport->mIce); CSFLogDebug(logTag, "Transport %u is active", static_cast<unsigned>(i)); ufrag = transport->mIce->GetUfrag(); pwd = transport->mIce->GetPassword(); candidates = transport->mIce->GetCandidates(); } else { CSFLogDebug(logTag, "Transport %u is disabled", static_cast<unsigned>(i)); // Make sure the MediaPipelineFactory doesn't try to use these. RemoveTransportFlow(i, false); RemoveTransportFlow(i, true); } RUN_ON_THREAD( GetSTSThread(), WrapRunnable(RefPtr<PeerConnectionMedia>(this), &PeerConnectionMedia::ActivateOrRemoveTransport_s, i, transport->mComponents, ufrag, pwd, candidates), NS_DISPATCH_NORMAL); } // We can have more streams than m-lines due to rollback. RUN_ON_THREAD( GetSTSThread(), WrapRunnable(RefPtr<PeerConnectionMedia>(this), &PeerConnectionMedia::RemoveTransportsAtOrAfter_s, transports.size()), NS_DISPATCH_NORMAL); }
void PeerConnectionMedia::UpdateTransports(const JsepSession& session, bool restartGathering) { auto transports = session.GetTransports(); for (size_t i = 0; i < transports.size(); ++i) { RefPtr<JsepTransport> transport = transports[i]; std::string ufrag; std::string pwd; std::vector<std::string> candidates; bool hasAttrs = false; if (transport->mIce) { CSFLogDebug(logTag, "Transport %u is active", static_cast<unsigned>(i)); hasAttrs = true; ufrag = transport->mIce->GetUfrag(); pwd = transport->mIce->GetPassword(); candidates = transport->mIce->GetCandidates(); } // Update the transport. RUN_ON_THREAD(GetSTSThread(), WrapRunnable(RefPtr<PeerConnectionMedia>(this), &PeerConnectionMedia::UpdateIceMediaStream_s, i, transport->mComponents, hasAttrs, ufrag, pwd, candidates), NS_DISPATCH_NORMAL); } if (restartGathering) { GatherIfReady(); } }