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!

Reply via email to