mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 10:57:34 +09:00
Merge remote-tracking branch 'origin/tracking' into custom
This commit is contained in:
commit
e235eb81c6
40 changed files with 516 additions and 78 deletions
|
|
@ -335,6 +335,7 @@ PeerConnectionImpl::PeerConnectionImpl(const GlobalObject* aGlobal)
|
|||
, mSTSThread(nullptr)
|
||||
, mAllowIceLoopback(false)
|
||||
, mAllowIceLinkLocal(false)
|
||||
, mForceIceTcp(false)
|
||||
, mMedia(nullptr)
|
||||
, mUuidGen(MakeUnique<PCUuidGenerator>())
|
||||
, mNumAudioStreams(0)
|
||||
|
|
@ -365,6 +366,8 @@ PeerConnectionImpl::PeerConnectionImpl(const GlobalObject* aGlobal)
|
|||
"media.peerconnection.ice.loopback", false);
|
||||
mAllowIceLinkLocal = Preferences::GetBool(
|
||||
"media.peerconnection.ice.link_local", false);
|
||||
mForceIceTcp = Preferences::GetBool(
|
||||
"media.peerconnection.ice.force_ice_tcp", false);
|
||||
#endif
|
||||
memset(mMaxReceiving, 0, sizeof(mMaxReceiving));
|
||||
memset(mMaxSending, 0, sizeof(mMaxSending));
|
||||
|
|
@ -527,8 +530,8 @@ PeerConnectionConfiguration::AddIceServer(const RTCIceServer &aServer)
|
|||
if (!(isStun || isStuns || isTurn || isTurns)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
if (isTurns || isStuns) {
|
||||
continue; // TODO: Support TURNS and STUNS (Bug 1056934)
|
||||
if (isStuns) {
|
||||
continue; // TODO: Support STUNS (Bug 1056934)
|
||||
}
|
||||
nsAutoCString spec;
|
||||
rv = url->GetSpec(spec);
|
||||
|
|
@ -577,6 +580,11 @@ PeerConnectionConfiguration::AddIceServer(const RTCIceServer &aServer)
|
|||
if (port == -1)
|
||||
port = (isStuns || isTurns)? 5349 : 3478;
|
||||
|
||||
if (isStuns || isTurns) {
|
||||
// Should we barf if transport is set to udp or something?
|
||||
transport = "tls";
|
||||
}
|
||||
|
||||
// First check the known good ports for webrtc
|
||||
bool knownGoodPort = false;
|
||||
for (int i = 0; !knownGoodPort && gGoodWebrtcPortList[i]; i++) {
|
||||
|
|
@ -2256,6 +2264,11 @@ NS_IMETHODIMP
|
|||
PeerConnectionImpl::AddIceCandidate(const char* aCandidate, const char* aMid, unsigned short aLevel) {
|
||||
PC_AUTO_ENTER_API_CALL(true);
|
||||
|
||||
if (mForceIceTcp && std::string::npos != std::string(aCandidate).find(" UDP ")) {
|
||||
CSFLogError(logTag, "Blocking remote UDP candidate: %s", aCandidate);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
JSErrorResult rv;
|
||||
RefPtr<PeerConnectionObserver> pco = do_QueryObjectReferent(mPCObserver);
|
||||
if (!pco) {
|
||||
|
|
@ -3111,7 +3124,7 @@ PeerConnectionImpl::SetSignalingState_m(PCImplSignalingState aSignalingState,
|
|||
mNegotiationNeeded = false;
|
||||
// If we're rolling back a local offer, we might need to remove some
|
||||
// transports, but nothing further needs to be done.
|
||||
mMedia->ActivateOrRemoveTransports(*mJsepSession);
|
||||
mMedia->ActivateOrRemoveTransports(*mJsepSession, mForceIceTcp);
|
||||
if (!rollback) {
|
||||
if (NS_FAILED(mMedia->UpdateMediaPipelines(*mJsepSession))) {
|
||||
CSFLogError(logTag, "Error Updating MediaPipelines");
|
||||
|
|
@ -3277,6 +3290,11 @@ PeerConnectionImpl::CandidateReady(const std::string& candidate,
|
|||
uint16_t level) {
|
||||
PC_AUTO_ENTER_API_CALL_VOID_RETURN(false);
|
||||
|
||||
if (mForceIceTcp && std::string::npos != candidate.find(" UDP ")) {
|
||||
CSFLogError(logTag, "Blocking local UDP candidate: %s", candidate.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
std::string mid;
|
||||
bool skipped = false;
|
||||
nsresult res = mJsepSession->AddLocalIceCandidate(candidate,
|
||||
|
|
|
|||
|
|
@ -803,6 +803,7 @@ private:
|
|||
|
||||
bool mAllowIceLoopback;
|
||||
bool mAllowIceLinkLocal;
|
||||
bool mForceIceTcp;
|
||||
RefPtr<PeerConnectionMedia> mMedia;
|
||||
|
||||
// The JSEP negotiation session.
|
||||
|
|
|
|||
|
|
@ -468,7 +468,8 @@ PeerConnectionMedia::EnsureTransport_s(size_t aLevel, size_t aComponentCount)
|
|||
}
|
||||
|
||||
void
|
||||
PeerConnectionMedia::ActivateOrRemoveTransports(const JsepSession& aSession)
|
||||
PeerConnectionMedia::ActivateOrRemoveTransports(const JsepSession& aSession,
|
||||
const bool forceIceTcp)
|
||||
{
|
||||
auto transports = aSession.GetTransports();
|
||||
for (size_t i = 0; i < transports.size(); ++i) {
|
||||
|
|
@ -491,6 +492,14 @@ PeerConnectionMedia::ActivateOrRemoveTransports(const JsepSession& aSession)
|
|||
RemoveTransportFlow(i, true);
|
||||
}
|
||||
|
||||
if (forceIceTcp) {
|
||||
candidates.erase(std::remove_if(candidates.begin(),
|
||||
candidates.end(),
|
||||
[](const std::string & s) {
|
||||
return s.find(" UDP "); }),
|
||||
candidates.end());
|
||||
}
|
||||
|
||||
RUN_ON_THREAD(
|
||||
GetSTSThread(),
|
||||
WrapRunnable(RefPtr<PeerConnectionMedia>(this),
|
||||
|
|
|
|||
|
|
@ -270,7 +270,8 @@ class PeerConnectionMedia : public sigslot::has_slots<> {
|
|||
|
||||
// Activate or remove ICE transports at the conclusion of offer/answer,
|
||||
// or when rollback occurs.
|
||||
void ActivateOrRemoveTransports(const JsepSession& aSession);
|
||||
void ActivateOrRemoveTransports(const JsepSession& aSession,
|
||||
const bool forceIceTcp);
|
||||
|
||||
// Start ICE checks.
|
||||
void StartIceChecks(const JsepSession& session);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue