📄 sdpcontents.hxx
字号:
#if !defined(RESIP_SDPCONTENTS_HXX)#define RESIP_SDPCONTENTS_HXX#include <vector>#include <list>#include <iosfwd>#include <memory>#include "resip/stack/Contents.hxx"#include "resip/stack/Uri.hxx"#include "rutil/Data.hxx"#include "rutil/HashMap.hxx"#include "rutil/HeapInstanceCounter.hxx"namespace resip{class SdpContents;class AttributeHelper{ public: RESIP_HeapCount(AttributeHelper); AttributeHelper(); AttributeHelper(const AttributeHelper& rhs); AttributeHelper& operator=(const AttributeHelper& rhs); bool exists(const Data& key) const; const std::list<Data>& getValues(const Data& key) const; std::ostream& encode(std::ostream& s) const; void parse(ParseBuffer& pb); void addAttribute(const Data& key, const Data& value = Data::Empty); void clearAttribute(const Data& key); private: std::list<std::pair<Data, Data> > mAttributeList; // used to ensure attribute ordering on encode HashMap< Data, std::list<Data> > mAttributes;};class SdpContents : public Contents{ public: RESIP_HeapCount(SdpContents); typedef enum {IP4=1, IP6} AddrType; static const SdpContents Empty; class Session; class Session { public: class Medium; class Codec { public: Codec() : mName(), mRate(0), mPayloadType(-1) {} Codec(const Data& name, unsigned long rate, const Data& parameters = Data::Empty, const Data& encodingParameters = Data::Empty); Codec(const Data& name, int payloadType, int rate=8000); Codec(const Codec& rhs); Codec& operator=(const Codec& codec); void parse(ParseBuffer& pb, const SdpContents::Session::Medium& medium, int payLoadType); const Data& getName() const; int getRate() const; int payloadType() const {return mPayloadType;} int& payloadType() {return mPayloadType;} const Data& parameters() const {return mParameters;} Data& parameters() {return mParameters;} const Data& encodingParameters() const {return mEncodingParameters;} Data& encodingParameters() {return mEncodingParameters;} static const Codec ULaw_8000; static const Codec ALaw_8000; static const Codec G729_8000; static const Codec G723_8000; static const Codec GSM_8000; static const Codec TelephoneEvent; static const Codec FrfDialedDigit; static const Codec CN; typedef HashMap<int, Codec> CodecMap; // "static" payload types as defined in RFC 3551. // Maps payload type (number) to Codec definition. static CodecMap& getStaticCodecs(); friend bool operator==(const Codec&, const Codec&); private: Data mName; unsigned long mRate; int mPayloadType; Data mParameters; // Format parameters Data mEncodingParameters; static std::auto_ptr<CodecMap> sStaticCodecs; static bool sStaticCodecsCreated; friend std::ostream& operator<<(std::ostream&, const Codec&); }; class Origin { public: Origin(const Data& user, const UInt64& sessionId, const UInt64& version, AddrType addr, const Data& address); Origin(const Origin& rhs); Origin& operator=(const Origin& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; const UInt64& getSessionId() const {return mSessionId;} UInt64& getSessionId() { return mSessionId; } const UInt64& getVersion() const {return mVersion;} UInt64& getVersion() { return mVersion; } const Data& user() const {return mUser;} Data& user() {return mUser;} AddrType getAddressType() const {return mAddrType;} const Data& getAddress() const {return mAddress;} void setAddress(const Data& host, AddrType type = IP4); private: Origin(); Data mUser; UInt64 mSessionId; UInt64 mVersion; AddrType mAddrType; Data mAddress; friend class Session; }; class Email { public: Email(const Data& address, const Data& freeText); Email(const Email& rhs); Email& operator=(const Email& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; const Data& getAddress() const {return mAddress;} const Data& getFreeText() const {return mFreeText;} private: Email() {} Data mAddress; Data mFreeText; friend class Session; }; class Phone { public: Phone(const Data& number, const Data& freeText); Phone(const Phone& rhs); Phone& operator=(const Phone& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; const Data& getNumber() const {return mNumber;} const Data& getFreeText() const {return mFreeText;} private: Phone() {} Data mNumber; Data mFreeText; friend class Session; }; class Connection { public: Connection(AddrType addType, const Data& address, unsigned long ttl = 0); Connection(const Connection& rhs); Connection& operator=(const Connection& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; AddrType getAddressType() const {return mAddrType;} const Data& getAddress() const {return mAddress;} void setAddress(const Data& host, AddrType type = IP4); unsigned long ttl() const {return mTTL;} unsigned long& ttl() {return mTTL;} private: Connection(); AddrType mAddrType; Data mAddress; unsigned long mTTL; friend class Session; friend class Medium; }; class Bandwidth { public: Bandwidth(const Data& modifier, unsigned long kbPerSecond); Bandwidth(const Bandwidth& rhs); Bandwidth& operator=(const Bandwidth& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; const Data& modifier() const {return mModifier;} Data modifier() {return mModifier;} unsigned long kbPerSecond() const {return mKbPerSecond;} unsigned long& kbPerSecond() {return mKbPerSecond;} private: Bandwidth() {} Data mModifier; unsigned long mKbPerSecond; friend class Session; friend class Medium; }; class Time { public: Time(unsigned long start, unsigned long stop); Time(const Time& rhs); Time& operator=(const Time& rhs); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; class Repeat { public: Repeat(unsigned long interval, unsigned long duration, std::list<int> offsets); void parse(ParseBuffer& pb); std::ostream& encode(std::ostream&) const; unsigned long getInterval() const {return mInterval;} unsigned long getDuration() const {return mDuration;} const std::list<int> getOffsets() const {return mOffsets;} private: Repeat() {} unsigned long mInterval; unsigned long mDuration; std::list<int> mOffsets; friend class Time; }; void addRepeat(const Repeat& repeat); unsigned long getStart() const {return mStart;} unsigned long getStop() const {return mStop;} const std::list<Repeat>& getRepeats() const {return mRepeats;} private: Time() {} unsigned long mStart; unsigned long mStop; std::list<Repeat> mRepeats; friend class Session; }; class Timezones { public:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -