i used kamailio v4.1
part of kamailio.cfg
for examples:
disable_tcp=no
auto_aliases=no
port=5085
enable_tls=yes
listen=udp:10.2.45.111:5085
listen=tcp:10.2.45.111:5085
listen=tls:10.2.45.111:5086
listen=tcp:10.2.45.111:5087
listen=tls:10.2.45.111:5088
and i excute
/etc/init.d/kamailio start
it can run
but when on ka v4.4.0
the same contents in kamailio.cfg but can`t run
both 4.1.x and 4.4.x when i change
disable_tcp=yes
it can run
but only listen on udp 5085
v4.1 i change disable_tcp=no
it can listen tls,tcp.udp
i use modules: dispatcher
v4.4 i setup a new modules : evapi
why tcp can`t run properly?
`#!KAMAILIO
####### Global Parameters #########
debug=0
log_stderror=no
memdbg=5
memlog=5
log_facility=LOG_LOCAL1
fork=yes
children=5
tcp_children=4
#disable_tcp=no
auto_aliases=no
port=5085
#4.1
enable_tls=yes
listen=udp:10.2.45.111:5085
listen=tcp:10.2.45.111:5085
listen=tls:10.2.45.111:5086
listen=tcp:10.2.45.111:5087
listen=tls:10.2.45.111:5088
sip_warning=no
#4.1
tcp_accept_no_cl=yes
tcp_connection_lifetime=3604
tcp_rd_buf_size=16384
exit_timeout = 300
#4.1
mpath="/home/administrator/kamailio/modules_k/:/home/administrator/kamailio_proxy/lib64/kamailio/modules/"
loadmodule "db_mysql.so"
loadmodule "mi_fifo.so"
loadmodule "kex.so"
loadmodule "tm.so"
loadmodule "tmx.so"
loadmodule "sl.so"
loadmodule "rr.so"
loadmodule "pv.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "siputils.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
loadmodule "ctl.so"
loadmodule "mi_rpc.so"
loadmodule "acc.so"
loadmodule "dispatcher.so"
#4.1
loadmodule "tls.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "xhttp.so"
loadmodule "websocket.so"
loadmodule "usrloc.so"
loadmodule "nathelper.so"
loadmodule "registrar.so"
#4.1
#added by liqixin
#loadmodule "evapi.so"
#added by liqixin
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)
# ----- acc params -----
modparam("acc", "log_flag", 1)
modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_extra",
"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;src_ip=$si")
# ----- tm params -----
modparam("tm", "fr_timer", 2000)
modparam("tm", "fr_inv_timer", 40000)
# ----- dispatcher params -----
modparam("dispatcher", "db_url",
"mysql://kamailio:kamailiorw@localhost/kamailio")
modparam("dispatcher", "table_name", "dispatcher")
modparam("dispatcher", "flags", 2)
modparam("dispatcher", "dst_avp", "$avp(AVP_DST)")
modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)")
modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)")
#4.4
modparam("dispatcher", "sock_avp", "$avp(AVP_SOCK)")
#4.4
#4.1
modparam("dispatcher", "ds_ping_method", "OPTIONS")
modparam("dispatcher", "ds_ping_from",
"sip:kamailio@10.2.45.111")
modparam("dispatcher", "ds_ping_interval", 10)
modparam("dispatcher", "ds_probing_threshold", 3)
modparam("dispatcher", "ds_ping_reply_codes",
"class=2;code=400;class=3")
modparam("dispatcher", "ds_probing_mode", 1)
#4.1
#4.1
# ----- usrloc params -----
/* enable DB persistency for location entries */
modparam("usrloc", "db_url",
"mysql://kamailio:kamailiorw@localhost/kamailio")
modparam("usrloc", "db_mode", 0)
modparam("registrar", "method_filtering", 1)
modparam("registrar", "max_expires", 3600)
modparam("registrar", "gruu_enabled", 0)
modparam("registrar", "use_path", 1)
modparam("registrar", "path_mode", 1)
modparam("registrar", "path_use_received", 0)
modparam("nathelper|registrar", "received_avp",
"$avp(RECEIVED)")
modparam("usrloc", "nat_bflag", 6)
#4.1
#4.1
# ----- tls params -----
#modparam("websocket", "cors_mode", 0);
modparam("websocket", "keepalive_mechanism", 0);
# ----- tls params -----
modparam("tls", "config",
"/home/administrator/kamailio_proxy/etc/kamailio/tls.cfg")
#4.1
#-------evapi----------
#modparam("evapi", "workers", 2)
#modparam("evapi", "bind_addr", "10.2.45.111:5085")
####### Routing Logic ########
# main request routing logic
route {
route(REQINIT);
#4.1
if (nat_uac_test(64)) {
# Do NAT traversal stuff for requests from a WebSocket
# connection - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
force_rport();
fix_nated_register();
add_contact_alias();
}
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
#4.1
route(WITHINDLG);
#4.4
# if (is_method("CANCEL"))
# {
# if (t_check_trans())
# t_relay();
# exit;
# }
#4.4
t_check_trans();
#4.4
# remove_hf("Route");
# if (is_method("INVITE|SUBSCRIBE"))
# record_route();
# if (is_method("INVITE"))
# {
# setflag(1); # do accounting
# }
# route(PRESENCE);
# route(REGISTRAR);
# if ($rU==$null)
# {
# request with no Username in RURI
# sl_send_reply("484","Address Incomplete");
# exit;
# }
#4.4
route(DISPATCH);
#4.1
route(RELAY);
#4.1
}
#4.1 xlog
route[RELAY] {
if (!t_relay()) {
sl_reply_error();
}
exit;
}
#---4.1---
# Per SIP request initial checks
route[REQINIT] {
#4.4
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
#4.4
if(!sanity_check("1511", "7"))
{
xlog("Malformed SIP message from $si:$sp\n");
exit;
}
}
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
if (loose_route()) {
if (is_method("BYE")) {
setflag(1); # do accounting ...
setflag(3); # ... even if the transaction fails
}
#4.1
# if ($du == "") {
# handle_ruri_alias();
# }
#4.1
route(RELAY);
} else {
#4.4
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
#4.4
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
t_relay();
exit;
} else {
exit;
}
}
sl_send_reply("404","Not here");
#4.1 if ( is_method("ACK") ) {
# if ( t_check_trans() ) {
# t_relay();
# exit;
# } else {
# exit;
# }
# }
# sl_send_reply("404","Not here");
}
#4.1 route(RELAY);
exit;
}
}
# Handle SIP registrations 4.4
route[REGISTRAR] {
if(!is_method("REGISTER"))
return;
sl_send_reply("404", "No registrar");
exit;
}
# Presence server route 4.4
route[PRESENCE] {
if(!is_method("PUBLISH|SUBSCRIBE"))
return;
sl_send_reply("404", "Not here");
exit;
}
# Dispatch requests-------4.4
# route[DISPATCH] {
# round robin dispatching on gateways group '1'
# if(!ds_select_dst("1", "4"))
# {
# send_reply("404", "No destination");
# exit;
# }
# xlog("L_DBG", "--- SCRIPT: going to <$ru> via
<$du>\n");
# t_on_failure("RTF_DISPATCH");
# route(RELAY);
# exit;
# }
# Dispatch requests-------4.4
#4.1----------------dispatch
# Dispatch requests
route[DISPATCH] {
# round robin dispatching on gateways group '1'
if(is_method("REGISTER")){
if(ds_select_dst("1", "0"))
{
loose_route();
# route(RELAY);
}
else
{
send_reply("404", "No destination");
exit;
}
}
else if (is_method("INVITE")) {
if ($du == "") {
if (!handle_ruri_alias()) {
xlog("L_ERR", "Bad alias
<$ru>\n");
sl_send_reply("400", "Bad
Request");
exit;
}
}
$avp(route)=$(hdr(Route)[0]);
$avp(LastRouteParam)=$(avp(route){param.count})-1;
if($(avp(route){param.name,$avp(LastRouteParam)})=="fccs>"){
#xlog("the method invite from sipserver \n");
loose_route();
if( $(ru{param.value,transport}) == "TCP"||$(ru{param.value,transport}) ==
"tcp" ){
record_route_preset("10.2.45.111:5085;transport=tcp","10.2.45.111:5085");
}
else if( $(ru{param.value,transport}) == "TLS"||$(ru{param.value,transport})
== "tls" ){
record_route_preset("10.2.45.111:5086;transport=tls","10.2.45.111:5085");
}
else if( $(ru{param.value,transport}) == "WS"||$(ru{param.value,transport})
== "ws" ){
record_route_preset("10.2.45.111:5087;transport=ws","10.2.45.111:5085");
}
else if( $(ru{param.value,transport}) == "WSS"||$(ru{param.value,transport})
== "ws" ){
record_route_preset("10.2.45.111:5088;transport=wss","10.2.45.111:5085");
}
else{
record_route_preset("10.2.45.111:5085","10.2.45.111:5085");
}
route(RELAY);
}
else{
if (ds_select_dst("1", "6")) {
#xlog("the first invite load balance \n");
if(proto==TCP){
record_route_preset("10.2.45.111:5085","10.2.45.111:5085;transport=tcp");
}
else if(proto==TLS){
record_route_preset("10.2.45.111:5085","10.2.45.111:5086;transport=tls");
}
else if(proto==WS){
record_route_preset("10.2.45.111:5085","10.2.45.111:5087;transport=ws");
}
else if(proto==WSS){
record_route_preset("10.2.45.111:5085","10.2.45.111:5088;transport=wss");
}
else{
record_route_preset("10.2.45.111:5085","10.2.45.111:5085");
}
loose_route();
route(RELAY);
}
else{
send_reply("503","Invite Load_balance Service Unavailable");
exit;
}
}
}
else
if(is_method("MESSAGE")||is_method("REFER")||is_method("PUBLISH")||is_method("SUBSCRIBE")||is_method("NOTIFY")){
$avp(route2)=$(hdr(Route)[0]);
$avp(LastRouteParam2)=$(avp(route){param.count})-1;
if($(avp(route2){param.name,$avp(LastRouteParam2)})=="fccs>"){
loose_route();
route(RELAY);
}
else{
if(ds_select_dst("1", "0"))
{
loose_route();
# route(RELAY);
}
else
{
send_reply("404", "No destination");
exit;
}
}
}
else{
send_reply("400","method not defined \n");
}
xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
t_on_failure("RTF_DISPATCH");
return;
}
#----------------4.1 dispatch
# Sample failure route ----4.4
#failure_route[RTF_DISPATCH] {
# if (t_is_canceled()) {
# exit;
# }
# next DST - only for 500 or local timeout
# if (t_check_status("500")
# or (t_branch_timeout() and !t_branch_replied()))
# {
# if(ds_next_dst())
# {
# t_on_failure("RTF_DISPATCH");
# route(RELAY);
# exit;
# }
# }
# }
# Sample failure route ----4.4
# Sample failure route
failure_route[RTF_DISPATCH] {
if (t_is_canceled()) {
exit;
}
# next DST - only for 500 or local timeout
if (t_check_status("500")
or (t_branch_timeout() and !t_branch_replied()))
{
if(ds_next_dst())
{
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;
}
#4.1
ds_mark_dst("ip"); # set to inactive and probing
#4.1
}
}
#4.1
onreply_route {
if (nat_uac_test(64)) {
# Do NAT traversal stuff for replies to a WebSocket connection
# - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
add_contact_alias();
}
}
#4.1
event_route[xhttp:request] {
set_reply_close();
set_reply_no_connect();
#set_forward_close();
#set_forward_no_connect();
#t_relay();
if ($Rp != 5087 && $Rp != 5088)
{
xlog("L_WARN", "HTTP request received on $Rp\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}
xlog("L_DBG", "HTTP Request Received\n");
if ($hdr(Upgrade)=~"websocket"
&& $hdr(Connection)=~"Upgrade"
&& $rm=~"GET") {
#xlog("websocket upgrade ok\n");
# Validate Host - make sure the client is using the correct
# alias for WebSockets
if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) {
xlog("L_WARN", "Bad host $hdr(Host)\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}
# Optional... validate Origin - make sure the client is from an
# authorised website. For example,
#
# if ($hdr(Origin) != "http://communicator.MY_DOMAIN"
# && $hdr(Origin) != "https://communicator.MY_DOMAIN") {
# xlog("L_WARN", "Unauthorised client $hdr(Origin)\n");
# xhttp_reply("403", "Forbidden", "", "");
# exit;
# }
# Optional... perform HTTP authentication
# ws_handle_handshake() exits (no further configuration file
# processing of the request) when complete.
if (ws_handle_handshake())
{
# Optional... cache some information about the
# successful connection
exit;
}
}
#route(RELAY);
xhttp_reply("404", "Http Not Found", "", "");
}
event_route[websocket:closed] {
xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n");
}
#added by liqixin
#event_route[evapi:connection-new] {
# xlog("new connection from $evapi(srcaddr):$evapi(srcport)\n");
#}
#event_route[evapi:connection-closed] {
# xlog("connection closed by $evapi(srcaddr):$evapi(srcport)\n");
#}
#added by liqixin`
---
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/585