SipccSdpMediaSection.h (3446B)
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 _SIPCCSDPMEDIASECTION_H_ 8 #define _SIPCCSDPMEDIASECTION_H_ 9 10 #include <map> 11 12 #include "mozilla/UniquePtr.h" 13 #include "sdp/SdpMediaSection.h" 14 #include "sdp/SipccSdpAttributeList.h" 15 16 extern "C" { 17 #include "sipcc_sdp.h" 18 } 19 20 namespace mozilla { 21 22 class SipccSdp; 23 class SdpParser; 24 25 using InternalResults = SdpParser::InternalResults; 26 27 class SipccSdpBandwidths final : public std::map<std::string, uint32_t> { 28 public: 29 bool Load(sdp_t* sdp, uint16_t level, InternalResults& results); 30 void Serialize(std::ostream& os) const; 31 }; 32 33 class SipccSdpMediaSection final : public SdpMediaSection { 34 friend class SipccSdp; 35 36 public: 37 ~SipccSdpMediaSection() {} 38 39 virtual MediaType GetMediaType() const override { return mMediaType; } 40 41 virtual unsigned int GetPort() const override; 42 virtual void SetPort(unsigned int port) override; 43 virtual unsigned int GetPortCount() const override; 44 virtual Protocol GetProtocol() const override; 45 virtual const SdpConnection& GetConnection() const override; 46 virtual SdpConnection& GetConnection() override; 47 virtual uint32_t GetBandwidth(const std::string& type) const override; 48 virtual const std::vector<std::string>& GetFormats() const override; 49 50 virtual const SdpAttributeList& GetAttributeList() const override; 51 virtual SdpAttributeList& GetAttributeList() override; 52 virtual SdpDirectionAttribute GetDirectionAttribute() const override; 53 54 virtual void AddCodec(const std::string& pt, const std::string& name, 55 uint32_t clockrate, uint16_t channels) override; 56 virtual void ClearCodecs() override; 57 58 virtual void AddDataChannel(const std::string& name, uint16_t port, 59 uint16_t streams, uint32_t message_size) override; 60 61 virtual void Serialize(std::ostream&) const override; 62 63 private: 64 SipccSdpMediaSection(size_t level, const SipccSdpAttributeList* sessionLevel) 65 : SdpMediaSection(level), 66 mMediaType(static_cast<MediaType>(0)), 67 mPort(0), 68 mPortCount(0), 69 mProtocol(static_cast<Protocol>(0)), 70 mAttributeList(sessionLevel) {} 71 72 SipccSdpMediaSection(const SipccSdpMediaSection& aOrig, 73 const SipccSdpAttributeList* sessionLevel); 74 75 bool Load(sdp_t* sdp, uint16_t level, InternalResults& results); 76 bool LoadConnection(sdp_t* sdp, uint16_t level, InternalResults& results); 77 bool LoadProtocol(sdp_t* sdp, uint16_t level, InternalResults& results); 78 bool LoadFormats(sdp_t* sdp, uint16_t level, InternalResults& results); 79 bool ValidateSimulcast(sdp_t* sdp, uint16_t level, 80 InternalResults& results) const; 81 bool ValidateSimulcastVersions( 82 sdp_t* sdp, uint16_t level, 83 const SdpSimulcastAttribute::Versions& versions, sdp::Direction direction, 84 InternalResults& results) const; 85 86 // the following values are cached on first get 87 MediaType mMediaType; 88 uint16_t mPort; 89 uint16_t mPortCount; 90 Protocol mProtocol; 91 std::vector<std::string> mFormats; 92 93 UniquePtr<SdpConnection> mConnection; 94 SipccSdpBandwidths mBandwidths; 95 96 SipccSdpAttributeList mAttributeList; 97 }; 98 } // namespace mozilla 99 100 #endif