tor-browser

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

RsdparsaSdpAttributeList.h (6676B)


      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 #ifndef _RSDPARSA_SDP_ATTRIBUTE_LIST_H_
      8 #define _RSDPARSA_SDP_ATTRIBUTE_LIST_H_
      9 
     10 #include "sdp/RsdparsaSdpGlue.h"
     11 #include "sdp/RsdparsaSdpInc.h"
     12 #include "sdp/SdpAttributeList.h"
     13 
     14 namespace mozilla {
     15 
     16 class RsdparsaSdp;
     17 class RsdparsaSdpMediaSection;
     18 class SdpParser;
     19 
     20 class RsdparsaSdpAttributeList : public SdpAttributeList {
     21  friend class RsdparsaSdpMediaSection;
     22  friend class RsdparsaSdp;
     23 
     24 public:
     25  // Make sure we don't hide the default arg thunks
     26  using SdpAttributeList::GetAttribute;
     27  using SdpAttributeList::HasAttribute;
     28 
     29  bool HasAttribute(AttributeType type, bool sessionFallback) const override;
     30  const SdpAttribute* GetAttribute(AttributeType type,
     31                                   bool sessionFallback) const override;
     32  void SetAttribute(SdpAttribute* attr) override;
     33  void RemoveAttribute(AttributeType type) override;
     34  void Clear() override;
     35  uint32_t Count() const override;
     36 
     37  const SdpConnectionAttribute& GetConnection() const override;
     38  const SdpFingerprintAttributeList& GetFingerprint() const override;
     39  const SdpGroupAttributeList& GetGroup() const override;
     40  const SdpOptionsAttribute& GetIceOptions() const override;
     41  const SdpRtcpAttribute& GetRtcp() const override;
     42  const SdpRemoteCandidatesAttribute& GetRemoteCandidates() const override;
     43  const SdpSetupAttribute& GetSetup() const override;
     44  const SdpSsrcAttributeList& GetSsrc() const override;
     45  const SdpSsrcGroupAttributeList& GetSsrcGroup() const override;
     46  const SdpDtlsMessageAttribute& GetDtlsMessage() const override;
     47 
     48  // These attributes can appear multiple times, so the returned
     49  // classes actually represent a collection of values.
     50  const std::vector<std::string>& GetCandidate() const override;
     51  const SdpExtmapAttributeList& GetExtmap() const override;
     52  const SdpFmtpAttributeList& GetFmtp() const override;
     53  const SdpImageattrAttributeList& GetImageattr() const override;
     54  const SdpSimulcastAttribute& GetSimulcast() const override;
     55  const SdpMsidAttributeList& GetMsid() const override;
     56  const SdpMsidSemanticAttributeList& GetMsidSemantic() const override;
     57  const SdpRidAttributeList& GetRid() const override;
     58  const SdpRtcpFbAttributeList& GetRtcpFb() const override;
     59  const SdpRtpmapAttributeList& GetRtpmap() const override;
     60  const SdpSctpmapAttributeList& GetSctpmap() const override;
     61 
     62  // These attributes are effectively simple types, so we'll make life
     63  // easy by just returning their value.
     64  uint32_t GetSctpPort() const override;
     65  uint32_t GetMaxMessageSize() const override;
     66  const std::string& GetIcePwd() const override;
     67  const std::string& GetIceUfrag() const override;
     68  const std::string& GetIdentity() const override;
     69  const std::string& GetLabel() const override;
     70  unsigned int GetMaxptime() const override;
     71  const std::string& GetMid() const override;
     72  unsigned int GetPtime() const override;
     73 
     74  SdpDirectionAttribute::Direction GetDirection() const override;
     75 
     76  void Serialize(std::ostream&) const override;
     77 
     78  virtual ~RsdparsaSdpAttributeList();
     79 
     80 private:
     81  explicit RsdparsaSdpAttributeList(RsdparsaSessionHandle session)
     82      : mSession(std::move(session)),
     83        mSessionAttributes(nullptr),
     84        mIsVideo(false),
     85        mAttributes() {
     86    RustAttributeList* attributes = get_sdp_session_attributes(mSession.get());
     87    LoadAll(attributes);
     88  }
     89 
     90  RsdparsaSdpAttributeList(RsdparsaSessionHandle session,
     91                           const RustMediaSection* const msection,
     92                           const RsdparsaSdpAttributeList* sessionAttributes)
     93      : mSession(std::move(session)),
     94        mSessionAttributes(sessionAttributes),
     95        mAttributes() {
     96    mIsVideo =
     97        sdp_rust_get_media_type(msection) == RustSdpMediaValue::kRustVideo;
     98    RustAttributeList* attributes = sdp_get_media_attribute_list(msection);
     99    LoadAll(attributes);
    100  }
    101 
    102  static const std::string kEmptyString;
    103  static const size_t kNumAttributeTypes = SdpAttribute::kLastAttribute + 1;
    104 
    105  const RsdparsaSessionHandle mSession;
    106  const RsdparsaSdpAttributeList* mSessionAttributes;
    107  bool mIsVideo;
    108 
    109  bool AtSessionLevel() const { return !mSessionAttributes; }
    110 
    111  bool IsAllowedHere(SdpAttribute::AttributeType type);
    112  void LoadAll(RustAttributeList* attributeList);
    113  void LoadAttribute(RustAttributeList* attributeList, AttributeType type);
    114  void LoadIceUfrag(RustAttributeList* attributeList);
    115  void LoadIcePwd(RustAttributeList* attributeList);
    116  void LoadIdentity(RustAttributeList* attributeList);
    117  void LoadIceOptions(RustAttributeList* attributeList);
    118  void LoadFingerprint(RustAttributeList* attributeList);
    119  void LoadDtlsMessage(RustAttributeList* attributeList);
    120  void LoadSetup(RustAttributeList* attributeList);
    121  void LoadSsrc(RustAttributeList* attributeList);
    122  void LoadSsrcGroup(RustAttributeList* attributeList);
    123  void LoadRtpmap(RustAttributeList* attributeList);
    124  void LoadFmtp(RustAttributeList* attributeList);
    125  void LoadPtime(RustAttributeList* attributeList);
    126  void LoadFlags(RustAttributeList* attributeList);
    127  void LoadMaxMessageSize(RustAttributeList* attributeList);
    128  void LoadMid(RustAttributeList* attributeList);
    129  void LoadMsid(RustAttributeList* attributeList);
    130  void LoadMsidSemantics(RustAttributeList* attributeList);
    131  void LoadGroup(RustAttributeList* attributeList);
    132  void LoadRtcp(RustAttributeList* attributeList);
    133  void LoadRtcpFb(RustAttributeList* attributeList);
    134  void LoadSctpPort(RustAttributeList* attributeList);
    135  void LoadSimulcast(RustAttributeList* attributeList);
    136  void LoadImageattr(RustAttributeList* attributeList);
    137  void LoadSctpmaps(RustAttributeList* attributeList);
    138  void LoadDirection(RustAttributeList* attributeList);
    139  void LoadRemoteCandidates(RustAttributeList* attributeList);
    140  void LoadRids(RustAttributeList* attributeList);
    141  void LoadExtmap(RustAttributeList* attributeList);
    142  void LoadMaxPtime(RustAttributeList* attributeList);
    143  void LoadCandidate(RustAttributeList* attributeList);
    144 
    145  void WarnAboutMisplacedAttribute(SdpAttribute::AttributeType type,
    146                                   uint32_t lineNumber, SdpParser& errorHolder);
    147 
    148  SdpAttribute* mAttributes[kNumAttributeTypes];
    149 
    150  RsdparsaSdpAttributeList(const RsdparsaSdpAttributeList& orig) = delete;
    151  RsdparsaSdpAttributeList& operator=(const RsdparsaSdpAttributeList& rhs) =
    152      delete;
    153 };
    154 
    155 }  // namespace mozilla
    156 
    157 #endif