Kamailio的dispatcher模块我用的很多,很熟
OpenSIPS有同名模块
二者基本功能相同
但真使起来,差别还是挺大的
# OpenSIPS
event_route[E_DISPATCHER_STATUS] {
# log each time a dispatcher destination
# changes its status
xlog("Dispatcher destination has new status");
}
OpenSIPS需要在路由里面修改destination的状态,但Kamailio则不用这么麻烦,模块自己就搞定了
以后抽时间仔细测试下OpenSIPS的这个模块,再完善这篇文章
查了查源码,主要逻辑如下:
evi_param_add_int(list, &group_str, &set->id);
evi_param_add_str(list, &address_str, address);
evi_param_add_str(list, &status_str,
type ? &inactive_str : &active_str);req = get_dummy_sip_msg();
status = evi_raise_event_msg(req, id, params); # 发一个dummy sip message
release_dummy_sip_msg(req);
改了下路由块,如下:
event_route[E_DISPATCHER_STATUS] {
# log each time a dispatcher destination
# changes its status$var(status) = $hdr(status);
xlog("Dispatcher destination has new status, ru = $rU, tu = $tU, fu = $fU, status = $var(status)\n");
avp_print();
}
但还是不行, $rU, $tU, $fU等可以正常取到,$hdr(status)为NULL,$hdr(group)没试,估计也不行
avp_print() 也不行,没有打印出有用的内容
看来OpenSIPS跟Kamailio有很大不同,没那么容易掌握
可能要求助Mailing List了
今天查了下文档,貌似在路由参数里面
https://www.opensips.org/Documentation/Script-CoreVar-3-2
$param(1), $param(2) 等等
OpenSIPS跟Kamailio虽然同源,但细节方面差异巨大
刚才做了测试,路由调整为: