tor-browser

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

SipccSdpAttributeList.h (6726B)


      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 _SIPCCSDPATTRIBUTELIST_H_
      8 #define _SIPCCSDPATTRIBUTELIST_H_
      9 
     10 #include "sdp/SdpAttributeList.h"
     11 #include "sdp/SdpParser.h"
     12 
     13 extern "C" {
     14 #include "sipcc_sdp.h"
     15 }
     16 
     17 namespace mozilla {
     18 
     19 class SipccSdp;
     20 class SipccSdpMediaSection;
     21 
     22 class SipccSdpAttributeList : public SdpAttributeList {
     23  friend class SipccSdpMediaSection;
     24  friend class SipccSdp;
     25 
     26 public:
     27  // Make sure we don't hide the default arg thunks
     28  using SdpAttributeList::GetAttribute;
     29  using SdpAttributeList::HasAttribute;
     30 
     31  virtual bool HasAttribute(AttributeType type,
     32                            bool sessionFallback) const override;
     33  virtual const SdpAttribute* GetAttribute(AttributeType type,
     34                                           bool sessionFallback) const override;
     35  virtual void SetAttribute(SdpAttribute* attr) override;
     36  virtual void RemoveAttribute(AttributeType type) override;
     37  virtual void Clear() override;
     38  virtual uint32_t Count() const override;
     39 
     40  virtual const SdpConnectionAttribute& GetConnection() const override;
     41  virtual const SdpFingerprintAttributeList& GetFingerprint() const override;
     42  virtual const SdpGroupAttributeList& GetGroup() const override;
     43  virtual const SdpOptionsAttribute& GetIceOptions() const override;
     44  virtual const SdpRtcpAttribute& GetRtcp() const override;
     45  virtual const SdpRemoteCandidatesAttribute& GetRemoteCandidates()
     46      const override;
     47  virtual const SdpSetupAttribute& GetSetup() const override;
     48  virtual const SdpSsrcAttributeList& GetSsrc() const override;
     49  virtual const SdpSsrcGroupAttributeList& GetSsrcGroup() const override;
     50  virtual const SdpDtlsMessageAttribute& GetDtlsMessage() const override;
     51 
     52  // These attributes can appear multiple times, so the returned
     53  // classes actually represent a collection of values.
     54  virtual const std::vector<std::string>& GetCandidate() const override;
     55  virtual const SdpExtmapAttributeList& GetExtmap() const override;
     56  virtual const SdpFmtpAttributeList& GetFmtp() const override;
     57  virtual const SdpImageattrAttributeList& GetImageattr() const override;
     58  const SdpSimulcastAttribute& GetSimulcast() const override;
     59  virtual const SdpMsidAttributeList& GetMsid() const override;
     60  virtual const SdpMsidSemanticAttributeList& GetMsidSemantic() const override;
     61  const SdpRidAttributeList& GetRid() const override;
     62  virtual const SdpRtcpFbAttributeList& GetRtcpFb() const override;
     63  virtual const SdpRtpmapAttributeList& GetRtpmap() const override;
     64  virtual const SdpSctpmapAttributeList& GetSctpmap() const override;
     65  virtual uint32_t GetSctpPort() const override;
     66  virtual uint32_t GetMaxMessageSize() const override;
     67 
     68  // These attributes are effectively simple types, so we'll make life
     69  // easy by just returning their value.
     70  virtual const std::string& GetIcePwd() const override;
     71  virtual const std::string& GetIceUfrag() const override;
     72  virtual const std::string& GetIdentity() const override;
     73  virtual const std::string& GetLabel() const override;
     74  virtual unsigned int GetMaxptime() const override;
     75  virtual const std::string& GetMid() const override;
     76  virtual unsigned int GetPtime() const override;
     77 
     78  virtual SdpDirectionAttribute::Direction GetDirection() const override;
     79 
     80  virtual void Serialize(std::ostream&) const override;
     81 
     82  virtual ~SipccSdpAttributeList();
     83 
     84 private:
     85  static const std::string kEmptyString;
     86  static const size_t kNumAttributeTypes = SdpAttribute::kLastAttribute + 1;
     87 
     88  // Pass a session-level attribute list if constructing a media-level one,
     89  // otherwise pass nullptr
     90  explicit SipccSdpAttributeList(const SipccSdpAttributeList* sessionLevel);
     91 
     92  // Copy c'tor, sort of
     93  SipccSdpAttributeList(const SipccSdpAttributeList& aOrig,
     94                        const SipccSdpAttributeList* sessionLevel);
     95 
     96  using InternalResults = SdpParser::InternalResults;
     97 
     98  bool Load(sdp_t* sdp, uint16_t level, InternalResults& results);
     99  void LoadSimpleStrings(sdp_t* sdp, uint16_t level, InternalResults& results);
    100  void LoadSimpleString(sdp_t* sdp, uint16_t level, sdp_attr_e attr,
    101                        AttributeType targetType, InternalResults& results);
    102  void LoadSimpleNumbers(sdp_t* sdp, uint16_t level, InternalResults& results);
    103  void LoadSimpleNumber(sdp_t* sdp, uint16_t level, sdp_attr_e attr,
    104                        AttributeType targetType, InternalResults& results);
    105  void LoadFlags(sdp_t* sdp, uint16_t level);
    106  void LoadDirection(sdp_t* sdp, uint16_t level, InternalResults& results);
    107  bool LoadRtpmap(sdp_t* sdp, uint16_t level, InternalResults& results);
    108  bool LoadSctpmap(sdp_t* sdp, uint16_t level, InternalResults& results);
    109  void LoadIceAttributes(sdp_t* sdp, uint16_t level);
    110  bool LoadFingerprint(sdp_t* sdp, uint16_t level, InternalResults& results);
    111  void LoadCandidate(sdp_t* sdp, uint16_t level);
    112  void LoadSetup(sdp_t* sdp, uint16_t level);
    113  void LoadSsrc(sdp_t* sdp, uint16_t level);
    114  void LoadSsrcGroup(sdp_t* sdp, uint16_t level);
    115  bool LoadImageattr(sdp_t* sdp, uint16_t level, InternalResults& results);
    116  bool LoadSimulcast(sdp_t* sdp, uint16_t level, InternalResults& results);
    117  bool LoadGroups(sdp_t* sdp, uint16_t level, InternalResults& results);
    118  bool LoadMsidSemantics(sdp_t* sdp, uint16_t level, InternalResults& results);
    119  void LoadIdentity(sdp_t* sdp, uint16_t level);
    120  void LoadDtlsMessage(sdp_t* sdp, uint16_t level);
    121  void LoadFmtp(sdp_t* sdp, uint16_t level);
    122  void LoadMsids(sdp_t* sdp, uint16_t level, InternalResults& results);
    123  bool LoadRid(sdp_t* sdp, uint16_t level, InternalResults& results);
    124  void LoadExtmap(sdp_t* sdp, uint16_t level, InternalResults& results);
    125  void LoadRtcpFb(sdp_t* sdp, uint16_t level, InternalResults& results);
    126  void LoadRtcp(sdp_t* sdp, uint16_t level, InternalResults& results);
    127  static SdpRtpmapAttributeList::CodecType GetCodecType(rtp_ptype type);
    128 
    129  bool AtSessionLevel() const { return !mSessionLevel; }
    130  bool IsAllowedHere(SdpAttribute::AttributeType type) const;
    131  void WarnAboutMisplacedAttribute(SdpAttribute::AttributeType type,
    132                                   uint32_t lineNumber,
    133                                   InternalResults& results);
    134 
    135  const SipccSdpAttributeList* mSessionLevel;
    136 
    137  SdpAttribute* mAttributes[kNumAttributeTypes];
    138 
    139  SipccSdpAttributeList(const SipccSdpAttributeList& orig) = delete;
    140  SipccSdpAttributeList& operator=(const SipccSdpAttributeList& rhs) = delete;
    141 };
    142 
    143 }  // namespace mozilla
    144 
    145 #endif