Sdp.h (6045B)
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 /* 8 9 ,-----. ,--. ,--. 10 ' .--./ ,--,--.,--.,--.,-' '-.`--' ,---. ,--,--, 11 | | ' ,-. || || |'-. .-',--.| .-. || ` 12 ' '--'\\ '-' |' '' ' | | | |' '-' '| || | 13 `-----' `--`--' `----' `--' `--' `---' `--''--' 14 15 :+o+- 16 -dNNNNNd. 17 yNNNNNNNs 18 :mNNNNNm- 19 `/sso/``-://- 20 .:+sydNNNNNNms: `://` 21 `-/+shmNNNNNNNNNNNNNNNms- :mNNNm/ 22 `-/oydmNNNNNNNNNNNNNNNNNNNNNNNNdo- +NNNNNN+ 23 .shmNNNNNNNNNNNmdyo/:dNNNNNNNNNNNNNNNNdo. `sNNNNNm+ 24 hNNNNNNNNmhs+:-` .dNNNNNNNNNNNNNNNNNNNNh+-` `hNNNNNm: 25 -yddyo/:. -dNNNNm::ymNNNNNNNNNNNNNNNmdy+/dNNNNNd. 26 :mNNNNd. `/ymNNNNNNNNNNNNNNNNNNNNNNh` 27 +NNNNNh` `+hNNNNNNNNNNNNNNNNNNNs 28 sNNNNNy` .yNNNNNm`-/oymNNNm+ 29 `yNNNNNo oNNNNNm` `-. 30 .dNNNNm/ oNNNNNm` 31 oNNNNm: +NNNNNm` 32 `+yho. +NNNNNm` 33 +NNNNNNs. 34 `yNNNNNNmy- 35 -smNNNNNNh: 36 .smNNNNNNh/ 37 `omNNNNNNd: 38 `+dNNNNNd 39 ````......```` /hmdy- 40 `.:/+osyhddmNNMMMMMMMMMMMMMMMMMMMMNNmddhyso+/:.` 41 `-+shmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmhs+-` 42 -smMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMds- 43 hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh 44 yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMs 45 .ohNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNh+. 46 ./oydmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmhyo:. 47 `.:/+osyyhddmmNNMMMMMMMMMMMMMMNNmmddhyyso+/:.` 48 49 ,--------.,--. ,--. ,--. 50 '--. .--'| ,---. `--' ,---. | | ,---. 51 | | | .-. |,--.( .-' | |( .-' 52 | | | | | || |.-' `) | |.-' `) 53 `--' `--' `--'`--'`----' `--'`----' 54 ,--. 55 ,---. ,------. ,------. ,--. | | 56 ' .-' | .-. \ | .--. ' ,--,--.,--.--.,-' '-. ,--,--.| | 57 `. `-. | | \ :| '--' |' ,-. || .--''-. .-'' ,-. || | 58 .-' || '--' /| | --' \ '-' || | | | \ '-' |`--' 59 `-----' `-------' `--' `--`--'`--' `--' `--`--'.--. 60 '__' 61 */ 62 63 #ifndef _SDP_H_ 64 #define _SDP_H_ 65 66 #include <ostream> 67 #include <sstream> 68 69 #include "sdp/SdpAttributeList.h" 70 #include "sdp/SdpEnum.h" 71 #include "sdp/SdpMediaSection.h" 72 73 namespace mozilla { 74 75 class SdpOrigin; 76 class SdpEncryptionKey; 77 class SdpMediaSection; 78 79 /** 80 * Base class for an SDP 81 */ 82 class Sdp { 83 public: 84 Sdp() = default; 85 virtual ~Sdp() = default; 86 87 virtual Sdp* Clone() const = 0; 88 89 virtual const SdpOrigin& GetOrigin() const = 0; 90 // Note: connection information is always retrieved from media sections 91 virtual uint32_t GetBandwidth(const std::string& type) const = 0; 92 93 virtual const SdpAttributeList& GetAttributeList() const = 0; 94 virtual SdpAttributeList& GetAttributeList() = 0; 95 96 virtual size_t GetMediaSectionCount() const = 0; 97 virtual const SdpMediaSection& GetMediaSection(size_t level) const = 0; 98 virtual SdpMediaSection& GetMediaSection(size_t level) = 0; 99 100 virtual SdpMediaSection& AddMediaSection(SdpMediaSection::MediaType media, 101 SdpDirectionAttribute::Direction dir, 102 uint16_t port, 103 SdpMediaSection::Protocol proto, 104 sdp::AddrType addrType, 105 const std::string& addr) = 0; 106 107 virtual void Serialize(std::ostream&) const = 0; 108 109 std::string ToString() const; 110 }; 111 112 inline std::ostream& operator<<(std::ostream& os, const Sdp& sdp) { 113 sdp.Serialize(os); 114 return os; 115 } 116 117 inline std::string Sdp::ToString() const { 118 std::stringstream s; 119 s << *this; 120 return s.str(); 121 } 122 123 class SdpOrigin { 124 public: 125 SdpOrigin(const std::string& username, uint64_t sessId, uint64_t sessVer, 126 sdp::AddrType addrType, const std::string& addr) 127 : mUsername(username), 128 mSessionId(sessId), 129 mSessionVersion(sessVer), 130 mAddrType(addrType), 131 mAddress(addr) {} 132 133 const std::string& GetUsername() const { return mUsername; } 134 135 uint64_t GetSessionId() const { return mSessionId; } 136 137 uint64_t GetSessionVersion() const { return mSessionVersion; } 138 139 sdp::AddrType GetAddrType() const { return mAddrType; } 140 141 const std::string& GetAddress() const { return mAddress; } 142 143 void Serialize(std::ostream& os) const { 144 sdp::NetType netType = sdp::kInternet; 145 os << "o=" << mUsername << " " << mSessionId << " " << mSessionVersion 146 << " " << netType << " " << mAddrType << " " << mAddress << "\r\n"; 147 } 148 149 private: 150 std::string mUsername; 151 uint64_t mSessionId; 152 uint64_t mSessionVersion; 153 sdp::AddrType mAddrType; 154 std::string mAddress; 155 }; 156 157 inline std::ostream& operator<<(std::ostream& os, const SdpOrigin& origin) { 158 origin.Serialize(os); 159 return os; 160 } 161 162 } // namespace mozilla 163 164 #endif