问题描述
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
我是kamailio服务器开发的初学者,我想进行串行分叉,但这不起作用。
我的kamailio服务器回复跳数过多(代码:483),并结束通话。 有人可以帮我吗?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
我使用以下代码:
request_route {
# per request initial checks
route(REQINIT);
# CANCEL processing
if (is_method("CANCEL")) {
if (t_check_trans()) {
t_relay();
}
exit;
}
# handle retransmissions
if (!is_method("ACK")) {
if(t_precheck_trans()) {
t_check_trans();
exit;
}
t_check_trans();
}
if (is_method("INVITE|SUBSCRIBE")) {
record_route();
}
if(is_method("REGISTER"))
save("location");
# test serial forking
if (method=="INVITE") {
if(!t_is_set("branch_route")) route(SERIAL);
};
if(lookup("location")){
if (!t_relay()) {
sl_reply_error();
}
exit;
}
}
route[SERIAL]{
$ru = "sip:1001@192.168.50.131:5060";
xlog("ALERT : new request uri $ru \n");
t_on_failure("1");
t_relay();
}
failure_route[1] {
if(t_is_canceled()) {
exit;
}
xlog(" an other alternative \n");
if(t_check_status("486|408")){
$ru = "sip:1002@192.168.50.131:5060";
xlog(" an other uri $ru \n");
t_on_failure("2");
t_relay();
exit;
}
}
failure_route[2] {
if(t_is_canceled()) {
exit;
}
xlog( "nobody available \n");
t_reply("500","Server error");
}
# Per SIP request initial checks
route[REQINIT] {
# no connect for sending replies
set_reply_no_connect();
#!ifdef WITH_ANTIFLOOD
# flood detection from same IP and traffic ban for a while
# be sure you exclude checking trusted peers,such as pstn gateways
# - local host excluded (e.g.,loop to self)
if(src_ip!=myself) {
if($sht(ipban=>$si)!=$null) {
# ip is already blocked
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
exit;
}
if (!pike_check_req()) {
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
exit;
}
}
#!endif
if($ua =~ "friendly-scanner|sipcli|sipvicious|VaxSIPUserAgent") {
# silent drop for scanners - uncomment next line if want to reply
# sl_send_reply("200","OK");
exit;
}
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if(is_method("OPTIONS") && uri==myself && $rU==$null) {
sl_send_reply("200","Keepalive");
exit;
}
if(!sanity_check("17895","7")) {
xlog("Malformed SIP request from $si:$sp\n");
exit;
}
}
解决方法
问题是在配置中,您的串行分支路由在运行Kamailio位置数据库之前就已运行。因此,在第一次分支到1001@192.168.50.131
之后,您需要以某种方式将调用路由到Kamailio将其定位到位置DB的部分,默认配置是route(LOCATION)。像这样:
route[SERIAL]{
$ru = "sip:1001@192.168.50.131:5060";
xlog("ALERT : new request uri $ru \n");
t_on_failure("1");
route(location);
}
不要忘记将route(location)
添加到您的配置中。