76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "sdp/SdpPref.h"
|
|
#include "sdp/RsdparsaSdpParser.h"
|
|
#include "sdp/SipccSdpParser.h"
|
|
|
|
namespace mozilla {
|
|
|
|
auto SdpPref::Parser() -> Parsers {
|
|
static const auto values = std::unordered_map<std::string, Parsers>{
|
|
{"sipcc", Parsers::Sipcc},
|
|
{"webrtc-sdp", Parsers::WebRtcSdp},
|
|
{DEFAULT, Parsers::Sipcc},
|
|
};
|
|
return Pref(PRIMARY_PREF, values);
|
|
}
|
|
|
|
auto SdpPref::AlternateParseMode() -> AlternateParseModes {
|
|
static const auto values =
|
|
std::unordered_map<std::string, AlternateParseModes>{
|
|
{"parallel", AlternateParseModes::Parallel},
|
|
{"failover", AlternateParseModes::Failover},
|
|
{"never", AlternateParseModes::Never},
|
|
{DEFAULT, AlternateParseModes::Parallel},
|
|
};
|
|
return Pref(ALTERNATE_PREF, values);
|
|
}
|
|
|
|
auto SdpPref::Primary() -> UniquePtr<SdpParser> {
|
|
switch (Parser()) {
|
|
case Parsers::Sipcc:
|
|
return UniquePtr<SdpParser>(new SipccSdpParser());
|
|
case Parsers::WebRtcSdp:
|
|
return UniquePtr<SdpParser>(new RsdparsaSdpParser());
|
|
}
|
|
MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED");
|
|
return nullptr;
|
|
}
|
|
|
|
auto SdpPref::Secondary() -> Maybe<UniquePtr<SdpParser>> {
|
|
if (AlternateParseMode() != AlternateParseModes::Parallel) {
|
|
return Nothing();
|
|
}
|
|
switch (Parser()) { // Choose whatever the primary parser isn't
|
|
case Parsers::Sipcc:
|
|
return Some(UniquePtr<SdpParser>(new RsdparsaSdpParser()));
|
|
case Parsers::WebRtcSdp:
|
|
return Some(UniquePtr<SdpParser>(new SipccSdpParser()));
|
|
}
|
|
MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED");
|
|
return Nothing();
|
|
}
|
|
|
|
auto SdpPref::Failover() -> Maybe<UniquePtr<SdpParser>> {
|
|
if (AlternateParseMode() != AlternateParseModes::Failover) {
|
|
return Nothing();
|
|
}
|
|
switch (Parser()) {
|
|
case Parsers::Sipcc:
|
|
return Some(UniquePtr<SdpParser>(new RsdparsaSdpParser()));
|
|
case Parsers::WebRtcSdp:
|
|
return Some(UniquePtr<SdpParser>(new SipccSdpParser()));
|
|
}
|
|
MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED");
|
|
return Nothing();
|
|
}
|
|
|
|
auto SdpPref::StrictSuccess() -> bool {
|
|
return Preferences::GetBool(STRICT_SUCCESS_PREF, false);
|
|
}
|
|
|
|
} // namespace mozilla
|