[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