📄 headers.cxx
字号:
#if defined(HAVE_CONFIG_H)#include "resip/stack/config.hxx"#endif#include "rutil/Data.hxx"#include "resip/stack/Headers.hxx"#include "resip/stack/Symbols.hxx"#include "resip/stack/SipMessage.hxx"// GPERF generated external routines#include "resip/stack/HeaderHash.hxx"#include <iostream>using namespace std;//int strcasecmp(const char*, const char*);//int strncasecmp(const char*, const char*, int len);using namespace resip;Data Headers::HeaderNames[MAX_HEADERS+1];bool Headers::CommaTokenizing[] = {false};bool Headers::CommaEncoding[] = {false};bool Headers::Multi[]={false};HeaderBase* HeaderBase::theHeaderInstances[] = {0};bool Headers::isCommaTokenizing(Type type){ return CommaTokenizing[type+1];}bool Headers::isCommaEncoding(Type type){ return CommaEncoding[type+1];}const Data&Headers::getHeaderName(int type){ return HeaderNames[type+1];}boolHeaders::isMulti(Type type){ return Multi[type+1];}#define defineHeader(_enum, _name, _type, _reference) \Headers::Type \H_##_enum::getTypeNum() const {return Headers::_enum;} \ \void H_##_enum::merge(SipMessage& target, const SipMessage& embedded) \{ \ if (embedded.exists(*this)) \ { \ target.header(*this) = embedded.header(*this); \ } \} \ \H_##_enum::H_##_enum() \{ \ Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti); \ Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2); \ Headers::HeaderNames[Headers::_enum+1] = _name; \ Headers::Multi[Headers::_enum+1] = false; \ HeaderBase::theHeaderInstances[Headers::_enum+1] = this; \} \ \_type& \H_##_enum::knownReturn(ParserContainerBase* container) \{ \ return dynamic_cast<ParserContainer<_type>*>(container)->front(); \} \ \ParserContainerBase* \H_##_enum::makeContainer(HeaderFieldValueList* hfvs) const \{ \ return new ParserContainer<_type>(hfvs,Headers::_enum); \} \ \H_##_enum resip::h_##_enum#define defineMultiHeader(_enum, _name, _type, _reference) \ Headers::Type \H_##_enum##s::getTypeNum() const {return Headers::_enum;} \ \void H_##_enum##s::merge(SipMessage& target, const SipMessage& embedded) \{ \ if (embedded.exists(*this)) \ { \ target.header(*this).append(embedded.header(*this)); \ } \} \ \H_##_enum##s::H_##_enum##s() \{ \ Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti); \ Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2); \ Headers::HeaderNames[Headers::_enum+1] = _name; \ Headers::Multi[Headers::_enum+1] = true; \ HeaderBase::theHeaderInstances[Headers::_enum+1] = this; \} \ \ParserContainer<_type>& \H_##_enum##s::knownReturn(ParserContainerBase* container) \{ \ return *dynamic_cast<ParserContainer<_type>*>(container); \} \ \ParserContainerBase* \H_##_enum##s::makeContainer(HeaderFieldValueList* hfvs) const \{ \ return new ParserContainer<_type>(hfvs,Headers::_enum); \} \ \H_##_enum##s resip::h_##_enum##s//====================// Token//====================defineHeader(ContentDisposition, "Content-Disposition", Token, "RFC 3261");defineHeader(ContentEncoding, "Content-Encoding", Token, "RFC 3261");defineHeader(ContentTransferEncoding, "Content-Transfer-Encoding", StringCategory, "RFC ?"); // !dlb! defineMultiHeaderdefineHeader(MIMEVersion, "MIME-Version", Token, "RFC 3261");defineHeader(Priority, "Priority", Token, "RFC 3261");defineHeader(Event, "Event", Token, "RFC 3265");defineHeader(SubscriptionState, "Subscription-State", Token, "RFC 3265");defineHeader(SIPETag, "SIP-ETag", Token, "RFC 3903");defineHeader(SIPIfMatch, "SIP-If-Match", Token, "RFC 3903");defineHeader(ContentId, "Content-ID", Token, "RFC 2045");defineHeader(Identity, "Identity", StringCategory, "draft-sip-identity-03");defineMultiHeader(AllowEvents, "Allow-Events", Token, "RFC 3265");// explicitly declare to avoid h_AllowEventss, ughH_AllowEventss resip::h_AllowEvents;defineMultiHeader(AcceptEncoding, "Accept-Encoding", Token, "RFC 3261");defineMultiHeader(AcceptLanguage, "Accept-Language", Token, "RFC 3261");defineMultiHeader(Allow, "Allow", Token, "RFC 3261");defineMultiHeader(ContentLanguage, "Content-Language", Token, "RFC 3261");defineMultiHeader(ProxyRequire, "Proxy-Require", Token, "RFC 3261");defineMultiHeader(Require, "Require", Token, "RFC 3261");defineMultiHeader(Supported, "Supported", Token, "RFC 3261");defineMultiHeader(Unsupported, "Unsupported", Token, "RFC 3261");defineMultiHeader(SecurityClient, "Security-Client", Token, "RFC 3329");defineMultiHeader(SecurityServer, "Security-Server", Token, "RFC 3329");defineMultiHeader(SecurityVerify, "Security-Verify", Token, "RFC 3329");// explicitly declare to avoid h_SecurityVerifys, ughH_SecurityVerifys resip::h_SecurityVerifies;defineMultiHeader(RequestDisposition, "Request-Disposition", Token, "RFC 3841");defineMultiHeader(Reason, "Reason", Token, "RFC 3326");defineMultiHeader(Privacy, "Privacy", Token, "RFC 3323");// explicitly declare to avoid h_PrivacysH_Privacys resip::h_Privacies;defineMultiHeader(PMediaAuthorization, "P-Media-Authorization", Token, "RFC 3313");defineHeader(ReferSub, "Refer-Sub", Token, "draft-ietf-sip-refer-with-norefersub-03");defineHeader(AnswerMode, "Answer-Mode", Token, "draft-ietf-answermode-01");defineHeader(PrivAnswerMode, "Priv-Answer-Mode", Token, "draft-ietf-answermode-01");//====================// Mime//====================typedef ParserContainer<Mime> Mimes;defineMultiHeader(Accept, "Accept", Mime, "RFC 3261");defineHeader(ContentType, "Content-Type", Mime, "RFC 3261");//====================// GenericUris://====================defineHeader(IdentityInfo, "Identity-Info", GenericUri, "draft-sip-identity-03");typedef ParserContainer<GenericUri> GenericUris;defineMultiHeader(CallInfo, "Call-Info", GenericUri, "RFC 3261");defineMultiHeader(AlertInfo, "Alert-Info", GenericUri, "RFC 3261");defineMultiHeader(ErrorInfo, "Error-Info", GenericUri, "RFC 3261");//====================// NameAddr://====================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -