项目中使用kamailio开源软件做为SIP注册服务器和SIP代理服务器,由于项目中要接PSTN网关和VOLTE网关,由于通过PSTN网关或者VOLTE网关呼入的SIP终端,好多都是不走注册流程的,当kamailio收到来自PSTN网关的呼叫时,通过python劫持到INVITE消息后,首先判断SIP账号是否是已经注册账号,如果不是注册过的账号,再对呼叫来源IP地址进行合法性校验,如果是合法的IP地址,则认为是匿名呼叫进来的用户,这时python脚本会返回一个固定的值,这时在kamailio.cfg里匹配到python返回的这个值,需要在INVITE的头域里增加一个头域,来告诉我们的SIP网关,这是一个合法的匿名入会用户。
重点讲下如何在kamailio.cfg配置文件中,在指定的route里对SIP原始报文做增加头域或者删除头域,这里以增加指定头域为例:
python_exec("handler", "Test Message\n");
if($rc == 1){
if (is_method("INVITE")) {
append_hf("Organization: sip_proxy\r\n");
if(!ds_select_dst("1", "0"))
{
xinfo("redirect failed");
}
else
{
xinfo("redirect successfully");
sl_send_reply("100","Trying");
forward();
exit;
}
}
}