tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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