做下载网站用阿里云的什么产品,青岛网站建设推广公司,wordpress编辑框,做鞋的网站分享下笔者最近编写的 kamailio 路由脚本
不用 rr 模块#xff0c;因为有些 sip 协议栈不支持 rr 头处理 sip 注册直接回 200 OK#xff0c;这部分目前不是重点更换 contact 头#xff0c;换成 kamailio 自己目前只支持 sip transport 为 udp#xff0c;以后可能支持 tcp因为有些 sip 协议栈不支持 rr 头处理 sip 注册直接回 200 OK这部分目前不是重点更换 contact 头换成 kamailio 自己目前只支持 sip transport 为 udp以后可能支持 tcptls 等
测试环境为
kamailio 版本为 5.8.1kamailio ip 为 192.168.43.135fs ip为 192.168.43.203microsip ip 为 192.168.43.68修改 microsip.inisourcePort5060fs 呼叫 kamailio, 后者 relay 到 microsip 的 5060 端口microsip 呼叫 kamailio, 后者 relay 到 fs 的 5080 端口
内行看门道可重点关注下面几个路由块
route[INVITE]onreply_route[MANAGE_REPLY] route[WITHINDLG]
下面是完整的路由脚本
#!substdef !KAM_IP!192.168.43.135!g
#!substdef !KAM_PORT!5060!g#!substdef !FS!sip:192.168.43.203:5080!g
#!substdef !MICROSIP!sip:192.168.43.68:5060!g# - flags
# FLT_ - per transaction (message) flags
#!define FLT_ACC 1
#!define FLT_ACCMISSED 2
#!define FLT_ACCFAILED 3
#!define FLT_NATS 5# FLB_ - per branch flags
#!define FLB_NATB 6
#!define FLB_NATSIPPING 7debug2
log_stderrorno
memdbg5
memlog5log_facilityLOG_LOCAL0
log_prefix{$mt $hdr(CSeq) $ci} children8# disable_tcpyes
# tcp_children8
# auto_aliasesno
# aliassip.mydomain.comlistenudp:KAM_IP:KAM_PORT
listentcp:KAM_IP:KAM_PORTtcp_connection_lifetime3605
tcp_max_connections2048
tcp_accept_no_clyes
enable_sctpno# mpath/usr/local/lib/kamailio/modules/loadmodule xhttp.so
loadmodule jsonrpcs.so
loadmodule kex.so
loadmodule corex.so
loadmodule tm.so
loadmodule tmx.so
loadmodule sl.so
#loadmodule rr.so
loadmodule pv.so
loadmodule maxfwd.so
loadmodule usrloc.so
loadmodule registrar.so
loadmodule textops.so
loadmodule textopsx.so
loadmodule siputils.so
loadmodule xlog.so
loadmodule sanity.so
loadmodule ctl.so
loadmodule cfg_rpc.so
loadmodule counters.so
#loadmodule auth_db.so
loadmodule nathelper.so
#loadmodule rtpengine.soloadmodule htable.somodparam(jsonrpcs, pretty_format, 1)
# modparam(jsonrpcs, fifo_name, /run/kamailio/kamailio_rpc.fifo)
# modparam(jsonrpcs, dgram_socket, /run/kamailio/kamailio_rpc.sock)
modparam(jsonrpcs, transport, 7)# modparam(ctl, binrpc, unix:/run/kamailio/kamailio_ctl)modparam(sanity, autodrop, 0)modparam(tm, failure_reply_mode, 3)
modparam(tm, fr_timer, 30000)
modparam(tm, fr_inv_timer, 120000)modparam(registrar, method_filtering, 1)
# modparam(registrar, append_branches, 0)
# modparam(registrar, max_contacts, 10)
modparam(registrar, max_expires, 3600)
modparam(registrar, gruu_enabled, 0)
modparam(registrar, use_path, 1)
modparam(registrar, path_mode, 0)modparam(usrloc, timer_interval, 60)
modparam(usrloc, timer_procs, 1)
modparam(usrloc, use_domain, 0)#modparam(usrloc, db_url, DBURL)
modparam(usrloc, db_mode, 0)#modparam(auth_db, db_url, DBURL)
#modparam(auth_db, calculate_ha1, yes)
#modparam(auth_db, password_column, password)
#modparam(auth_db, load_credentials, )
#modparam(auth_db, use_domain, 0)#modparam(rtpengine, rtpengine_sock, udp:127.0.0.1:2223)# ----- nathelper params -----
modparam(nathelper, natping_interval, 30)
modparam(nathelper, ping_nated_only, 1)
modparam(nathelper, sipping_bflag, FLB_NATSIPPING)
modparam(nathelper, sipping_from, sip:pingerkamailio.org)modparam(nathelper|registrar, received_avp, $avp(RECEIVED))
modparam(usrloc, nat_bflag, FLB_NATB)request_route {route(REQINIT);route(NATDETECT);# CANCEL processingif (is_method(CANCEL)) {if (t_check_trans()) {route(RELAY);}exit;}if (!is_method(ACK)) {if(t_precheck_trans()) {t_check_trans();exit;}t_check_trans();}route(WITHINDLG);route(AUTH);remove_hf(Route);route(PRESENCE);route(REGISTRAR);if (is_method(OPTIONS)) {sl_send_reply(200, OK);exit;}if ($rU$null) {sl_send_reply(484, Address Incomplete);exit;}if (is_method(INVITE)) {route(INVITE);exit;}sl_send_reply(501, Not Implemented );return;
}route[RELAY] {if (is_method(INVITE|BYE|SUBSCRIBE|UPDATE)) {if(!t_is_set(branch_route)) t_on_branch(MANAGE_BRANCH);}if (is_method(INVITE|SUBSCRIBE|UPDATE)) {if(!t_is_set(onreply_route)) t_on_reply(MANAGE_REPLY);}if (is_method(INVITE)) {if(!t_is_set(failure_route)) t_on_failure(MANAGE_FAILURE);}if (!t_relay()) {sl_reply_error();}exit;
}route[REQINIT] {set_reply_no_connect();force_rport();if (!mf_process_maxfwd_header(10)) {sl_send_reply(483, Too Many Hops);exit;}if(!sanity_check(17895, 7)) {xlog(Malformed SIP request from $si:$sp\n);exit;}
}route[WITHINDLG] {if (!has_totag()) return;if ($(ru{uri.param,lm}) ~ ua) {$var(host) $(ru{uri.param,lhst});xlog(WITHINDLG|$var(host)\n);$var(host)$(var(host){s.decode.base64t});$du $var(host);xlog(WITHINDLG|du$var(host)\n);$var(new) $(ru{re.subst,/^(sip:.*);lhst.*/\1/});$ru $var(new);xlog(WITHINDLG|ru$var(new)\n);route(RELAY);}exit;
}route[REGISTRAR] {if (!is_method(REGISTER)) return;sl_send_reply(200, OK);exit;
}# Presence server processing
route[PRESENCE] {if(!is_method(PUBLISH|SUBSCRIBE)) return;sl_send_reply(404, Not here);exit;
}route[AUTH] {return;
}route[NATDETECT] {//if (nat_uac_test(19)) {// if (is_method(REGISTER)) {// fix_nated_register();// } else {// if(is_first_hop()) {// set_contact_alias();// }// }// setflag(FLT_NATS);//}return;
}route[NATMANAGE] {//if (is_request()) {// if(has_totag()) {// if(check_route_param(natyes)) {// setbflag(FLB_NATB);// }// }//}if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return;//if(nat_uac_test(8)) {// rtpengine_manage(SIP-source-address replace-origin replace-session-connection);//} else {// rtpengine_manage(replace-origin replace-session-connection);//}//if (is_request()) {// if (!has_totag()) {// if(t_is_branch_route()) {// add_rr_param(;natyes);// }// }//}if (is_reply()) {if(isbflagset(FLB_NATB)) {if(is_first_hop())set_contact_alias();}}if(isbflagset(FLB_NATB)) {# no connect message in a dialog involving NAT traversalif (is_request()) {if(has_totag()) {set_forward_no_connect();}}}return;
}# URI update for dialog requests
route[DLGURI] {if(!isdsturiset()) {handle_ruri_alias();}return;
}event_route[xhttp:request] {set_reply_close();set_reply_no_connect();if(src_ip!127.0.0.1) {xhttp_reply(403, Forbidden, text/html,htmlbodyNot allowed from $si/body/html);exit;}if ($hu ~ ^/RPC) {jsonrpc_dispatch();exit;}xhttp_reply(200, OK, text/html,htmlbodyWrong URL $hu/body/html);exit;
}branch_route[MANAGE_BRANCH] {xdbg(new branch [$T_branch_idx] to $ru\n);route(NATMANAGE);return;
}reply_route {if(!sanity_check(17604, 6)) {xlog(Malformed SIP response from $si:$sp\n);drop;}return;
}onreply_route[MANAGE_REPLY] {xinfo(incoming reply|$rm|$rs|$ct\n);if($rm INVITE status~[12][0-9][0-9] is_present_hf(Contact)) {$var(user) $(sel(contact.uri.user));remove_hf(Contact);$var(host) $(sut{s.encode.base64t});append_hf(Contact: sip:$var(user)KAM_IP:KAM_PORT;transportudp;lhst$var(host);lmuas\r\n, CSeq);route(NATMANAGE);}return;
}failure_route[MANAGE_FAILURE] {route(NATMANAGE);if (t_is_canceled()) exit;return;
}route[INVITE] {if ($ua ~ FreeSWITCH) {xlog(fs call microsip\n);$du MICROSIP;} else {xlog(microsip call fs\n);$du FS;}$var(user) $(sel(contact.uri.user));remove_hf(Contact);$var(host) $(sut{s.encode.base64t});append_hf(Contact: sip:$var(user)KAM_IP:KAM_PORT;transportudp;lhst$var(host);lmuac\r\n, CSeq);route(RELAY);exit;
}当然 OpenSIPS 有拓扑隐藏模块UA 看不到 rr 头工作的很好