[OpenSIPS-Users] Can you drop a 487 Request Terminated?

Vlad Paiu vladpaiu at opensips.org
Thu Mar 1 10:34:29 CET 2012


Hello,

You can arm a failure_route for the Invites to the gateways, and inside 
the failure_route change the status code to whatever you want by doing
     t_reply("500","Cannot Route");

or whatever message that you want.

Regards,
Vlad

Vlad Paiu
OpenSIPS Developer
http://www.opensips-solutions.com


On 03/01/2012 08:33 AM, discodog62 at aol.com wrote:
> When I setup a call then cancel the call I am getting a 487 from my 
> gateway that is relayed to the client.
> I don't wish to show the 487 to the client.  Is it possible to drop 
> the reply for the 487?
>
> I am hoping someone could let me know if this is possible.
>
> I am running opensips 1.7  Here is a copy of my config as well.
>
> debug=4
> log_stderror=no
> log_facility=LOG_LOCAL0
>
> fork=yes
> children=4
> disable_tcp=yes
> auto_aliases=yes
> sip_warning=yes
>
> listen=udp:10.8.1.139:5060
>
> group=nobody
> user=nobody
>
> server_header="ZZZ"
> server_signature = off
> user_agent_header="User-Agent: ZZZ"
>
> ####### Modules Section ########
>
> #set module path
> mpath="/usr/local/lib64/opensips/modules/"
> loadmodule "db_text.so"
> loadmodule "signaling.so"
> loadmodule "sl.so"
> loadmodule "tm.so"
> loadmodule "rr.so"
> loadmodule "maxfwd.so"
> loadmodule "textops.so"
> loadmodule "mi_fifo.so"
> loadmodule "uri.so"
> loadmodule "domain.so"
> loadmodule "permissions.so"
> loadmodule "userblacklist.so"
> loadmodule "dialog.so"
>
> modparam("domain|userblacklist|dialog|permissions", 
> "db_url","text:///zxa/server/opensipsDNC")
> modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
> modparam("rr", "append_fromtag", 0)
> modparam("uri", "use_uri_table", 0)
> modparam("domain", "db_mode", 1)   # Use caching
>
> ####### Routing Logic ########
>
> # main request routing logic
>
> route{
>
> xlog("=== TOP ===");
>     xlog("%%%% tu= $tu | fu= $fu | od= $od | ReceivedINT: $Ri | 
> SourceIP: $si %%%");
>     if ( $si == "10.8.1.139") && ( $Ri == "10.8.1.139")
>     {
>         exit;
>     }
>     if (!check_address("1","$si","$sp","$proto"))
>     {
>
> xlog("=== ACCESS FAILED ===");
> xlog("=== $si| $sp | $proto ===");
>         sl_send_reply("403","Forbidden");
>         exit;
>
>     }
>
>     if (!mf_process_maxfwd_header("10"))
>     {
>    xlog("=== TOO MANY HOPS ===");
>         sl_send_reply("483","Too Many Hops");
>         exit;
>     }
>
> #CANCEL processing
>     if (is_method("CANCEL"))
>     {
>    xlog("=== CANCEL 76 ===");
>         if (t_check_trans())
>             t_relay();
>         exit;
>     }
> if (is_method("PUBLISH"))
>     {
>         sl_send_reply("503", "Service Unavailable");
>         exit;
>     }
>     if (has_totag())
>     {
>         xlog("=== HAS TO TAG ===");
>
>         if (loose_route())
> {
>             xlog("=== HAS LOOSE ===");
>             if (is_method("BYE"))
>             {
>                  xlog("=== LOOSE BYE ===");
>                  route(3);
>                  exit;
>             } else if (is_method("INVITE")) {
>                 xlog("=== RE-INVITE LOOSE ===");
>                 record_route();
>             }
>             xlog("In loouse going to Route 1");
>             route(1);
>         } else {
>             if ( is_method("ACK") )
>             {
>                 xlog("=== LOOSE ELSE ACK ===");
>                 if ( t_check_trans() )
>                 {
>                     t_relay();
>                     exit;
>                 } else {
>                     xlog("=== LOOSE Discard ACK ===");
>                     exit;
>                 }
>             }
>
>                 sl_send_reply("404","Not here");
>         }
>         exit;
>     }
>
>     t_check_trans();
>
> if (loose_route())
>     {
>         xlog("L_ERR","Attempt to route with preloaded Route's 
> [$fu/$tu/$ru/$ci]");
>         if (!is_method("ACK"))
>         {
>             sl_send_reply("403","Preload Route denied");
>              exit;
>         }
>     }
>
>     # record routing
>     if (!is_method("REGISTER|MESSAGE"))
> {
>         record_route();
>     }
>
>     if (!is_uri_host_local())
>     {
>         xlog("Not local so lets just see what happens $rd");
>         route(1);
>     }
>
>     if ($rU==NULL)
>     {
>         # request with no Username in RURI
>         sl_send_reply("484","Address Incomplete");
>         exit;
>     }
>     if (is_method("INVITE") && (!has_totag()) )
>     {
>         xlog("||||||  NEW CALL ||||||");
>     }
>     route(2);
>
>     send_reply("420", "Invalid Extension");
>     exit;
> }
>
>
> route[1] {
>     #---- RTP Proxy handling ---#
>     xlog("=== ROUTE 1 ===");
>     rewritehostport("10.8.1.44:5060");
>     if (is_method("INVITE")) {
>         t_on_reply("1");
>         t_on_failure("1");
>     }
>     if (!t_relay())
>     {
>         sl_reply_error();
>     }
>     exit;
> }
>
> route[2] {
>     xlog("=== ROUTE 2 ===");
>     if (!check_blacklist("userblacklist"))
>     {
>         xlog('~~~  BLACKLISTED DID Forbidden ~~~');
>         sl_send_reply("403", "DID Forbidden");
>         exit;
>     }
>     route(1);
>
> }
>
> route[3] {
>   xlog("=== ROUTE 3 ===");
>   t_on_reply("1");
>   t_on_failure("1");
>   t_relay("udp:10.8.1.44:5060");
>
> }
>
> branch_route[1] {
>     xlog("new branch at $ru\n");
> }
>
>
> onreply_route[1] {
>     xlog("=== ON REPLY ROUTE 2  rs= $rs | fu= $fu | si= $si | Ri= $Ri 
> ===");
>     if (t_check_status("487"))
>     {
>         xlog("487 at reply route");
>         t_cancel_branch();
>         drop;
>     }
>
> }
>
>
> failure_route[1] {
> xlog("=== FAIL ROUTE ===");
>   xlog("=== FAIL ROUTE 2  fu= $fu | od= $od | si= $si | Ri= $Ri ===");
> if (t_was_cancelled())
>     {
>         exit;
>     }
>
> }
>
>
> Here is a call flow that I have a question about.  Sorry if this is 
> over kill.
>
> | 10.6.3.87         |10.8.1.139         | 10.8.1.44                   
>           |
> |                   |                   |
> |         Request: INVITE sip           |                   |SIP/SDP: 
> Request: INVITE
> |(5068)   ------------------>  (5060)   |                   |
> |         Status: 100 Giving            |                   |SIP: 
> Status: 100 Giving a try
> |(5068) <------------------  (5060)   |                   |
> |                   |         Request: INVITE sip           |SIP/SDP: 
> Request: INVITE
> |                   |(5060)   ------------------>  (5060)   |
> |                   |         Status: 100 Trying            |SIP: 
> Status: 100 Trying
> |                   |(5060) <------------------  (5060)   |
> |                   |         Status: 180 Ringing           |SIP: 
> Status: 180 Ringing
> |                   |(5060) <------------------  (5060)   |
> |         Status: 180 Ringing           |                   |SIP: 
> Status: 180 Ringing
> |(5068) <------------------  (5060)   |                   |
> |         Request: CANCEL sip           |                   |SIP: 
> Request: CANCEL
> |(5068)   ------------------>  (5060)   |                   |
> |         Status: 200 canceli           |                   |SIP: 
> Status: 200 canceling
> |(5068) <------------------  (5060)   |                   |
> |                   |         Request: CANCEL sip           |SIP: 
> Request: CANCEL
> |                   |(5060)   ------------------>  (5060)   |
> |         Request: ACK sip:18           |                   |SIP: 
> Request: ACK
> |(5068)   ------------------>  (5060)   |                   |
> |         Request: BYE sip:18           |                   |SIP: 
> Request: BYE
> |(5068)   ------------------>  (5060)   |                   |
> |                   |         Request: BYE sip:10           |SIP: 
> Request: BYE
> |                   |(5060)   ------------------>  (5060)   |
> |                   |         Status: 200 OK                |SIP: 
> Status: 200 OK
> |                   |(5060) <------------------  (5060)   |
> |                   |         Status: 487 Request           |SIP: 
> Status: 487 Request Terminated
> |                   |(5060) <------------------  (5060)   |
> |                   |         Request: ACK sip:18           |SIP: 
> Request: ACK
> |                   |(5060)   ------------------>  (5060)   |
> |         Status: 487 Request           |                   |SIP: 
> Status: 487 Request Terminated
> |(5068) <------------------  (5060)   |                   |
> |         Request: ACK sip:18           |                   |SIP: 
> Request: ACK
> |(5068)   ------------------>  (5060)   |                   |
> |                   |         Status: 200 OK                |SIP: 
> Status: 200 OK
> |                   |(5060) <------------------  (5060)   |
> |         Status: 200 OK                |                   |SIP: 
> Status: 200 OK
> |(5068) <------------------  (5060)   |                   |
>
>
> Thanks,
>
> James
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120301/5758b0e4/attachment-0001.htm>


More information about the Users mailing list