Header宏defineHeader主要分布三处,分别是
SipMessage.cxx defineHeader(_header, _name, _type, _rfc)
Headers.hxx defineHeader(_enum, _name, _type, _rfc)
Headers.cxx defineHeader(_enum, _name, _type, _reference)
SipMessage宏展开为调用的函数,而Headers宏展开则定义了一个类。
以RetryAfter为例
宏 defineHeader(RetryAfter,"Retry-After", UInt32Category, "RFC 3261");
调用方式
SipMessage* tryLater;
tryLater->header(h_RetryAfter);
相关宏展开之后
SipMessage.cxx 调用函数
Heads.hxx 类声明
class H_RetryAfter :public HeaderBase
{
public:
RESIP_HeapCount(H_RetryAfter);
enum {Single = true};
typedef UInt32Category Type;
UnusedChecking(RetryAfter);
static Type&knownReturn(ParserContainerBase* container);
virtual ParserContainerBase*makeContainer(HeaderFieldValueList* hfvs) const;
virtual Headers::Type getTypeNum()const;
virtual void merge(SipMessage&, constSipMessage&);
H_RetryAfter();
};
extern H_RetryAfterh_RetryAfter
Headers.cxx 类定义
从上面可以看出,使用宏目的是方便添加新的SIP组成零件,避免重复代码量。