SdpPref.cpp (2455B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "sdp/SdpPref.h" 8 9 #include "sdp/RsdparsaSdpParser.h" 10 #include "sdp/SipccSdpParser.h" 11 12 namespace mozilla { 13 14 auto SdpPref::Parser() -> Parsers { 15 static const auto values = std::unordered_map<std::string, Parsers>{ 16 {"sipcc", Parsers::Sipcc}, 17 {"webrtc-sdp", Parsers::WebRtcSdp}, 18 {DEFAULT, Parsers::Sipcc}, 19 }; 20 return Pref(PRIMARY_PREF, values); 21 } 22 23 auto SdpPref::AlternateParseMode() -> AlternateParseModes { 24 static const auto values = 25 std::unordered_map<std::string, AlternateParseModes>{ 26 {"parallel", AlternateParseModes::Parallel}, 27 {"failover", AlternateParseModes::Failover}, 28 {"never", AlternateParseModes::Never}, 29 {DEFAULT, AlternateParseModes::Parallel}, 30 }; 31 return Pref(ALTERNATE_PREF, values); 32 } 33 34 auto SdpPref::Primary() -> UniquePtr<SdpParser> { 35 switch (Parser()) { 36 case Parsers::Sipcc: 37 return UniquePtr<SdpParser>(new SipccSdpParser()); 38 case Parsers::WebRtcSdp: 39 return UniquePtr<SdpParser>(new RsdparsaSdpParser()); 40 } 41 MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED"); 42 return nullptr; 43 } 44 45 auto SdpPref::Secondary() -> Maybe<UniquePtr<SdpParser>> { 46 if (AlternateParseMode() != AlternateParseModes::Parallel) { 47 return Nothing(); 48 } 49 switch (Parser()) { // Choose whatever the primary parser isn't 50 case Parsers::Sipcc: 51 return Some(UniquePtr<SdpParser>(new RsdparsaSdpParser())); 52 case Parsers::WebRtcSdp: 53 return Some(UniquePtr<SdpParser>(new SipccSdpParser())); 54 } 55 MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED"); 56 return Nothing(); 57 } 58 59 auto SdpPref::Failover() -> Maybe<UniquePtr<SdpParser>> { 60 if (AlternateParseMode() != AlternateParseModes::Failover) { 61 return Nothing(); 62 } 63 switch (Parser()) { 64 case Parsers::Sipcc: 65 return Some(UniquePtr<SdpParser>(new RsdparsaSdpParser())); 66 case Parsers::WebRtcSdp: 67 return Some(UniquePtr<SdpParser>(new SipccSdpParser())); 68 } 69 MOZ_CRASH("ALL Parsers CASES ARE NOT COVERED"); 70 return Nothing(); 71 } 72 73 auto SdpPref::StrictSuccess() -> bool { 74 return Preferences::GetBool(STRICT_SUCCESS_PREF, false); 75 } 76 77 } // namespace mozilla