can you show us a complete trace? both sides Regards, David Villasmil email: [email protected]
On Tue, Feb 3, 2026 at 7:39 PM Goons via sr-users < [email protected]> wrote: > daramola76@gmail.com wrote: > > Hello Sergio Charrua > > Find below the necessary routing blocks, I have made some adjustments to > the previous routing blocks. > > #!ifdef WITH_WEBSOCKETS > > event_route[xhttp:request] { > > set_reply_close(); > > set_reply_no_connect(); > > if ($Rp != MY_WS_PORT && $Rp != MY_WSS_PORT > > ) { > > xlog("L_WARN", "HTTP request received on $Rp\n"); > > xhttp_reply("403", "Forbidden", "", ""); > > exit; > > } > > xlog("L_INFO", "HTTP Request Received\n"); > > if ($hdr(Upgrade) =~ "websocket" > > && $hdr(Connection) =~ "Upgrade" > > && $rm =~ "GET" > > ) { > > if ($hdr(Host) == $null) { > > xlog("L_WARN", "Bad host $hdr(Host)\n"); > > xhttp_reply("403", "Forbidden", "", ""); > > exit; > > } > > if (ws_handle_handshake()) { > > exit; > > } > > } > > xhttp_reply("404", "Not Found", "", ""); > > } > > event_route[websocket:closed] { > > xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n"); > > } > > #!endif > > request_route { > > xlog("L_ALERT"," ------- New Call (Routing) ----- $rm \n"); > > xlog("L_INFO", > > "[REQ-IN] " > > "src=$si:$sp " > > "dst=$Ri:$Rp " > > "du =$du " > > "proto=$proto " > > "ru=$ru " > > "ruri_user=$rU " > > "from=$fu " > > "to=$tu " > > "callid=$ci " > > "ct=$hdr(Content-Type)\n" > > ); > > #!ifdef WITH_WEBSOCKETS > > if (nat_uac_test(64)) { > > force_rport(); > > if (is_method("REGISTER")) { > > fix_nated_register(); > > xlog("L_INFO", "Fixed NAT registration for $fu\n"); > > } else { > > if (!add_contact_alias()) { > > xlog("L_ERR", "Error aliasing contact <$ct> from > $si:$sp\n"); > > sl_send_reply("400", "Bad Request"); > > exit; > > } > > xlog("L_INFO", "Added contact alias from $si:$sp\n"); > > } > > } > > #!endif > > route(REQINIT); > > route(SET_DIRECTION_FLAG); > > # NAT detection > > route(NATDETECT); > > if ( is_method("OPTIONS") ) { > > if($fU=='sipsak'){ > > sl_send_reply("500", "Server Dead"); > > exit; > > } > > } > > if ( is_method("INFO") ) { > > sl_send_reply("200", "OK"); > > exit; > > } > > #!ifdef WITH_HOMER > > #start duplicate the SIP message now > > sip_trace(); > > setflag(22); > > #!endif > > # per request initial checks > > # handle requests within SIP dialogs > > route(WITHINDLG); > > ### only initial requests (no To tag) > > # CANCEL processing > > if (is_method("CANCEL")){ > > if (t_check_trans()) > > t_relay(); > > exit; > > } > > t_check_trans(); > > # authentication > > route(AUTH); > > # record routing for dialog forming requests (in case they are > routed) > > # - remove preloaded route headers > > remove_hf("Route"); > > remove_hf("X-VoipMonitor-Custom1"); > > if (is_method("INVITE|SUBSCRIBE")){ > > record_route_preset("x.x.x.x:5060;nat=yes"); > > } > > # account only INVITEs > > if (is_method("INVITE")) > > { > > setflag(FLT_ACC); # do accounting > > } > > # handle registrations > > route(REGISTRAR); > > if ($rU==$null) > > { > > # request with no Username in RURI > > sl_send_reply("484","Address Incomplete"); > > exit; > > } > > # dispatch destinations to PSTN > > route(PSTN); > > # user location service > > route(LOCATION); > > xlog("L_INFO", > > "REQ OUT $rm | via proto=$proto sndto=$sndto(proto) " > > "dst=$sndto(ip):$sndto(port) du=$du\n" > > ); > > route(RELAY); > > } > > onsend_route { > > #if(to_ip==1.2.3.4 && !isflagset(12)){ > > xlog("L_WARN", "[onsend_route] Packet going to $du [$mb]\n" ); > > #} > > } > > route[RELAY] { > > if (is_method("INVITE|SUBSCRIBE|UPDATE|INFO")) { > > route(SET_RTP_REQUEST); > > t_on_branch("MANAGE_BRANCH"); > > t_on_reply("MANAGE_REPLY"); > > } > > if (is_method("INVITE|UPDATE|INFO")) { > > t_on_failure("MANAGE_FAILURE"); > > } > > if (!t_relay()) { > > sl_reply_error(); > > } > > exit; > > } > > # Per SIP request initial checks > > route[REQINIT] { > > #!ifdef WITH_ANTIFLOOD > > #!ifdef WITH_EXEC > > #Run-time IPTable > > if ($ua =~ "(VoipSwitch|Asterisk)") { > > xdbg("Callfrom UA $ua\n"); > > } else if($ua =~ > "(zxcvfdf11|friendly-scanner|pplsip|sipvicious|sipcli|VaxSIPUserAgent|voxalot|MizuPhone|Ozeki|tramb2017|voip|hello|Independant|Skipper)") > { > > # silent drop for scanners > > xlog("L_INFO","Blocking scanners and > pushing IPs to iptables"); > > exec_avp("iptables -I INPUT -s $si -j > DROP"); > > exec_avp("/sbin/service iptables save"); > > sl_send_reply("403", "Forbidden"); > > exit; > > } > > #!endif > > if (is_method("REGISTER")){ > > if (!mf_process_maxfwd_header("10")) { > > sl_send_reply("483","Too Many Hops"); > > exit; > > } > > if(!sanity_check("1511", "7")) { > > xlog("L_ALERT","Malformed SIP message from > $si:$sp\n"); > > send_reply("403", "Forbidden"); > > exit; > > } > > return 1; > > } > > if(is_method("INVITE") || is_method("SUBSCRIBE") || > is_method("REGISTER")){ > > # 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) { > > # $fu is already blocked > > xdbg("request from blocked User - $fU, > $rm from $fu (IP:$si:$sp)\n"); > > if(is_method("INVITE")){ > > xlog("L_ALERT"," ALERT: > $fU user source IP Address $si:$sp is already blocked.\n"); > > } > > send_reply("403", "Forbidden"); > > exit; > > } > > if (!pike_check_req()) { > > xlog("L_ALERT","Blocking traffic from > $si\n"); > > xlog("L_ALERT","ALERT: pike blocking > $fU, $rm from $fu (IP:$si:$sp)\n"); > > $sht(ipban=>$si) = 1; > > xlog("L_ALERT","ALERT: $fU user source > IP Address $si:$sp is blocking by system.\n"); > > xlog("L_INFO","ALERT: INSERT INTO > `htable` (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$si', > '1','$si',now(),'1')\n"); > > sql_xquery("ca","INSERT INTO `htable` > (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$si', > '1','$si',now(),'1')", "ra"); > > sql_xquery("ca","INSERT INTO > `htabledump` (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$si', > '1','$si',now(),'1')", "ra"); > > send_reply("403", "Forbidden"); > > exit; > > } > > } > > if($ua =~ "friendly-scanner") { > > sl_send_reply("200", "OK"); > > exit; > > } > > } > > if(!is_method("OPTIONS") && !is_method("SUBSCRIBE") && > !is_method("NOTIFY") && !is_method("INVITE")){ > > if(src_ip!=myself) { > > if($sht(userban=>$fU)!=$null) { > > xdbg("request from blocked User - $fU, > $rm from $fu (IP:$si:$sp)\n"); > > if(is_method("INVITE")){ > > xlog("L_ALERT"," ALERT: $fU user > source IP Address $si:$sp is already blocked.\n"); > > } > > send_reply("403", "Forbidden"); > > exit; > > } > > if (!pike_check_req()) { > > xlog("L_ALERT","ALERT: pike blocking > $fU, $rm from $fu (IP:$si:$sp)\n"); > > xlog("L_ALERT","Blocking traffic from > $si\n"); > > $sht(userban=>$fU) = 1; > > xlog("L_ALERT","ALERT: $fU user source IP Address $si:$sp is blocking by > system.\n"); > > xlog("L_INFO","ALERT: INSERT INTO > `htable` (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$fU', > '1','$si',now(),'1')\n"); > > sql_xquery("ca","INSERT INTO `htable` > (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$fU', > '1','$si',now(),'1')", "ra"); > > sql_xquery("ca","INSERT INTO > `htabledump` (`key_name`, `key_value`, ip, htime,serverid) VALUES ('$fU', > '1','$si',now(),'1')", "ra"); > > send_reply("403", "Forbidden"); > > exit; > > } > > } > > if($ua =~ "friendly-scanner") { > > sl_send_reply("200", "OK"); > > exit; > > } > > } > > #!endif > > 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("1511", "7")) { > > xlog("Malformed SIP message from $si:$sp\n"); > > exit; > > } > > } > > route[WITHINDLG] { > > if (has_totag()) { > > if (loose_route()) { > > if (is_method("BYE")) { > > setflag(FLT_ACC); # do accounting ... > > setflag(FLT_ACCFAILED); # ... even if > the transaction fails > > rtpengine_delete(); > > } > > if ( is_method("ACK") ) { > > # ACK is forwarded statelessy > > route(NATMANAGE); > > } > > remove_hf("X-FROMURI"); > > remove_hf("X-CARRIERCPS"); > > remove_hf("X-CARRIERID"); > > remove_hf("X-MEDIP"); > > remove_hf("X-ACCOUNTCODE"); > > remove_hf("X-DEVICEID"); > > remove_hf("X-DEVICECC"); > > remove_hf("X-DEVICECPS"); > > remove_hf("X-ACCOUNTID"); > > remove_hf("X-ACCOUNTCC"); > > remove_hf("X-ACCOUNTCPS"); > > remove_hf("X-WITHMEDIA"); > > remove_hf("X-DEVICETYPE"); > > remove_hf("X-SRC-ACCOUNT"); > > remove_hf("X-SRC-MED-IP"); > > remove_hf("X-FS-Support"); > > remove_hf("X-DSTURI"); > > remove_hf("X-GMEDIA"); > > remove_hf("X-RE"); > > remove_hf("X-Billing-Code"); > > remove_hf("X-AI"); > > remove_hf("X-PU"); > > remove_hf("X-MEDIATRA"); > > remove_hf("X-INCOMINGCARRIER"); > > remove_hf("X-INCOMINGCARRIERDST"); > > remove_hf("X-DEVICEID-1"); > > remove_hf("Allow-Events"); > > msg_apply_changes(); > > route(RELAY); > > } else { > > if (is_method("SUBSCRIBE") && uri == myself) { > > # in-dialog subscribe requests > > sl_send_reply("404","Not here"); > > exit; > > } > > if ( is_method("ACK") ) { > > if ( t_check_trans() ) { > > t_relay(); > > exit; > > } else { > > exit; > > } > > } > > sl_send_reply("404","Not here"); > > } > > exit; > > } > > } > > route[NATDETECT] { > > #!ifdef WITH_NAT > > force_rport(); > > if (nat_uac_test("19")) { > > if (is_method("REGISTER")) { > > fix_nated_register(); > > } else { > > fix_nated_contact(); > > } > > setflag(FLT_NATS); > > setbflag(FLB_NATB); > > } > > if ($proto == "WS" || $proto == "WSS") { > > force_rport(); > > if (is_method("REGISTER")) { > > fix_nated_register(); > > add_path_received(); > > } > > setflag(FLT_NATS); > > setbflag(FLB_NATB); > > xlog("L_INFO", "WebRTC client detected: $si:$sp\n"); > > } > > #!endif > > return; > > } > > route[NATMANAGE] { > > if (is_request()) { > > if(has_totag()) { > > if(check_route_param("nat=yes")) { > > setbflag(FLB_NATB); > > } > > } > > } > > if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return; > > if (is_request()) { > > if (!has_totag()) { > > if(t_is_branch_route()) { > > add_rr_param(";nat=yes"); > > } > > } > > } > > if (is_reply()) { > > if(isbflagset(FLB_NATB)) { > > if(is_first_hop()) > > set_contact_alias(); > > } > > } > > return; > > } > > route[PSTN] { > > if($hdr(X-DSTURI) == $null){ > > return; > > }else { > > #!ifdef WITH_FREESWITCH > > if(route(FROMFREESWITCH)){ > > #External Call sip_h_X-CARRIERCPS > sip_h_X-CARRIERID > > $var(CARRIERCPS) = $hdr(X-CARRIERCPS); > > $var(CARRIERID) = $hdr(X-CARRIERID); > > xlog("L_ALERT","Carrier Allowed CPS > $var(CARRIERCPS) for carrier $hdr(X-CARRIERID)\n"); > > if(route(CCPSCHECK)){ > > sl_send_reply("515", "Limit > issue"); > > exit; > > } > > $avp(oexten) = $rU; > > $ru = $hdr(X-DSTURI); > > #$du = $null; > > $tu = $ru; > > $var(MEDIATRA) = $hdr(X-MEDIATRA); > > if($hdr(X-MEDIATRA) == '1'){ > > setflag(FLT_NATS); > > }else{ > > resetflag(FLT_NATS); > > } > > remove_hf("X-FROMURI"); > > remove_hf("X-CARRIERCPS"); > > remove_hf("X-CARRIERID"); > > remove_hf("X-MEDIP"); > > remove_hf("X-ACCOUNTCODE"); > > remove_hf("X-DEVICEID"); > > remove_hf("X-DEVICECC"); > > remove_hf("X-DEVICECPS"); > > remove_hf("X-ACCOUNTID"); > > remove_hf("X-ACCOUNTCC"); > > remove_hf("X-ACCOUNTCPS"); > > remove_hf("X-WITHMEDIA"); > > remove_hf("X-DEVICETYPE"); > > remove_hf("X-SRC-ACCOUNT"); > > remove_hf("X-SRC-MED-IP"); > > remove_hf("X-FS-Support"); > > remove_hf("X-DSTURI"); > > remove_hf("X-GMEDIA"); > > remove_hf("X-RE"); > > remove_hf("X-AI"); > > remove_hf("X-PU"); > > remove_hf("X-MEDIATRA"); > > remove_hf("Allow-Events"); > > remove_hf("User-Agent"); > > remove_hf("X-INCOMINGCARRIER"); > > remove_hf("X-INCOMINGCARRIERDST"); > > remove_hf("X-Billing-Code"); > > remove_hf("X-DEVICEID-1"); > > append_hf("User-Agent: \r\n"); > > msg_apply_changes(); > > # when routing via usrloc, log the > missed calls also > > if (is_method("INVITE")) { > > setflag(FLT_ACCMISSED); > > } > > if($(var(CARRIERID){s.len}) > 1 ){ > > route(CCPSSET); > > } > > route(RELAY); > > exit; > > } > > } > > #!endif > > } > > branch_route[MANAGE_BRANCH] { > > xdbg("new branch [$T_branch_idx] to $ru\n"); > > route(NATMANAGE); > > } > > onreply_route[MANAGE_REPLY] { > > xlog("L_INFO", > > "[REPLY-IN] " > > "method=$rm " > > "src=$si:$sp " > > "dst=$Ri:$Rp " > > "du=$du " > > "proto=$proto " > > "ru=$ru " > > "to-tag=$tt " > > "to-tag=$(tt{s.len}) " > > "ct=$hdr(Content-Type)\n" > > ); > > xdbg("incoming reply\n"); > > # if (!has_body("application/sdp")) return; > > # if (!($rs == 183 || $rs == 200)) return; > > # if (!has_totag()) return; > > route(NATMANAGE); > > route(SET_DIRECTION_FLAG); > > route(SET_RTP_REPLY); > > } > > failure_route[MANAGE_FAILURE] { > > route(NATMANAGE); > > route(SET_RTP_REPLY); > > if (t_is_canceled()) { > > exit; > > } > > #!ifdef WITH_BLOCK3XX > > if (t_check_status("3[0-9][0-9]")) { > > t_reply("404","Not found"); > > exit; > > } > > #!endif > > #!ifdef WITH_CODE486408 > > # serial forking > > if (t_check_status("408")) { > > t_reply("486","Busy"); > > exit; > > } > > if (t_check_status("408")) { > > t_reply("486","Request Timeout"); > > exit; > > } > > #!endif > > } > > route[SET_DIRECTION_FLAG] { > > # === FROM CORE === > > if ( is_ip_rfc1918("$si") ) { > > # Core → WebRTC > > if ($proto == "ws" || $proto == "wss" || $ru =~ > "transport=(ws|wss)") { > > xlog("L_INFO", "[DIR] CORE → WEBRTC | src=$si proto=$proto > ru=$ru du=$du\n"); > > setflag(FLB_FROM_CORE_TO_WEBRTC); > > return; > > } > > # Core → SIP > > xlog("L_INFO", "[DIR] CORE → SIP | src=$si proto=$proto ru=$ru > du=$du\n"); > > setflag(FLB_FROM_CORE_TO_SIP); > > return; > > } > > # === FROM PUBLIC === > > else { > > # Public → WebRTC > > if ($proto == "ws" || $proto == "wss") { > > xlog("L_INFO", "[DIR] PUBLIC → WEBRTC | src=$si proto=$proto > ru=$ru du=$du\n"); > > setflag(FLB_FROM_PUBLIC_FROM_WEBRTC); > > return; > > } > > # Public → SIP > > xlog("L_INFO", "[DIR] PUBLIC → SIP | src=$si proto=$proto ru=$ru > du=$du\n"); > > setflag(FLB_FROM_PUBLIC_FROM_SIP); > > return; > > } > > } > > route[SET_RTP_REQUEST] { > > if (!is_method("UPDATE|INVITE")) { > > return 0; > > } > > if (sdp_content()) { > > $avp(originalSDP) = $rb; > > if(isflagset(FLB_FROM_PUBLIC_FROM_WEBRTC)) { > > xlog("L_INFO", "SET_RTP_REQUEST | FROM PUBLIC > FROM WEBRTC"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP ICE=remove direction=external > direction=internal"); > > } > > if(isflagset(FLB_FROM_PUBLIC_FROM_SIP)) { > > xlog("L_INFO", "SET_RTP_REQUEST | FROM PUBLIC > FROM SIP"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP ICE=remove direction=external > direction=internal"); > > } > > if(isflagset(FLB_FROM_CORE_TO_WEBRTC)) { > > xlog("L_INFO", "SET_RTP_REQUEST | FROM CORE TO > WEBRTC"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/SAVPF ICE=force direction=internal > direction=external"); > > } > > if(isflagset(FLB_FROM_CORE_TO_SIP)) { > > xlog("L_INFO", "SET_RTP_REQUEST | FROM CORE TO > SIP"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP direction=internal direction=external"); > > } > > } > > } > > route[SET_RTP_REPLY] { > > xlog("L_INFO", "SET_RTP_REPLY | ENTERING THE ROUTE BLOCK"); > > if (sdp_content()) { > > $avp(originalSDP) = $rb; > > if(isflagset(FLB_FROM_PUBLIC_FROM_WEBRTC)) { > > xlog("L_INFO", "SET_RTP_REPLY | FROM PUBLIC FROM > WEBRTC"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP ICE=remove direction=external > direction=internal"); > > } > > if(isflagset(FLB_FROM_PUBLIC_FROM_SIP)) { > > xlog("L_INFO", "SET_RTP_REPLY | FROM PUBLIC FROM > SIP"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP ICE=remove direction=external > direction=internal"); > > } > > if(isflagset(FLB_FROM_CORE_TO_WEBRTC)) { > > xlog("L_INFO", "SET_RTP_REPLY | FROM CORE TO > WEBRTC"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/SAVPF ICE=force direction=internal > direction=external"); > > } > > if(isflagset(FLB_FROM_CORE_TO_SIP)) { > > xlog("L_INFO", "SET_RTP_REPLY | FROM CORE TO > SIP"); > > rtpengine_manage("replace-origin > replace-session-connection RTP/AVP direction=external direction=external"); > > } > > } > > if ($rs=~"[3-6][0-9][0-9]") { > > rtpengine_manage(); > > } > > } > > #!ifdef WITH_FREESWITCH > > route[FROMFREESWITCH] { > > if(ds_is_from_list("2")){ > > return 1; > > } > > return -1; > > } > > #!endif > >From my request route Xlog, $du is null thus not allowing me set the > right flag for RTP > > INFO: <script>: [REQ-IN] src=x.x.x.x:56338 dst=x.x.x.x:8443 du =<null> > proto=wss ru=sip:xxx.xxx.xxx ruri_user=<null> from=sip:[email protected] > to=sip:[email protected] callid=1dslee7rr24ecov8naga ct=<null> > > > xlog("L_INFO", > "[REQ-IN] " > "src=$si:$sp " > "dst=$Ri:$Rp " > "du =$du " > "proto=$proto " > "ru=$ru " > "ruri_user=$rU " > "from=$fu " > "to=$tu " > "callid=$ci " > "ct=$hdr(Content-Type)\n" > ); > __________________________________________________________ > Kamailio - Users Mailing List - Non Commercial Discussions -- > [email protected] > To unsubscribe send an email to [email protected] > Important: keep the mailing list in the recipients, do not reply only to > the sender! >
__________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions -- [email protected] To unsubscribe send an email to [email protected] Important: keep the mailing list in the recipients, do not reply only to the sender!
