📄 sdpcontents.hxx
字号:
#if !defined(RESIP_SDPCONTENTS_HXX)
#define RESIP_SDPCONTENTS_HXX
#include <vector>
#include <list>
#include <iosfwd>
#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:
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);
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;}
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;
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;
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:
class Adjustment
{
public:
Adjustment(unsigned long time,
int offset);
Adjustment(const Adjustment& rhs);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -