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