ReSIProcate之header宏

来源:互联网 发布:怎么代理淘宝上的衣服 编辑:程序博客网 时间:2024/04/27 13:43

 

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组成零件,避免重复代码量。

 

原创粉丝点击