最近阅读Opensips代码,偶有所想,就随便写写吧。
1. 关于宏:
以前自己也写过,但是没有写过宏内容展开,完全不包含相关变量名的。
#define IFISMETHOD(methodname,firstchar) \
if ( (*tmp==(firstchar) || *tmp==((firstchar) | 32)) && \
strncasecmp( tmp+1, #methodname +1, methodname##_LEN-1)==0 && \
*(tmp+methodname##_LEN)==' ') { \
fl->type=SIP_REQUEST; \
fl->u.request.method.len=methodname##_LEN; \
fl->u.request.method_value=METHOD_##methodname; \
tmp=buffer+methodname##_LEN; \
}
例如:
if ( )
{
} else IFISMETHOD ( INVITE, 'I' )
2. 疑问点:
Radius 实现函数中,有这样一些函数和变量,但是搜不到原始定义
rc_handle *rh;
rh = rc_read_config((char*)(cfg.rest))
rc_read_dictionary(rh, rc_conf_str(rh, "dictionary"))
rc_handle 可以理解为 Resource Control 只能先这样