[OpenSIPS-Users] Adding data to a request before relaying it

Bogdan-Andrei Iancu bogdan at voice-system.ro
Mon Oct 11 15:07:04 CEST 2010


Hi Najib,

According to RFC3261, if a 6xx reply was received for a transaction, a 
proxy must not create any other new branches for that transaction. This 
is why you cannot continue the processing of the INVITE after the 6xx, 
but you can do it after a 3xx.

Regards,
Bogdan

Najib Hara wrote:
> Hi everyone,
>
> Here is the routing logic that I did to implement this type of 
> scenario, but I have some remarks and I would like to share it with 
> you so I can have your opinion:
> I used the 380 reply (Alternative Service) instead of the 6xx replies 
> because OpenSIPS seems like it can't resend my INVITE after receiving 
> this type of replies.
> Here is the errors in the log file:
>
>     ERROR:tm:t_forward_nonack: discarding fwd for a cancelled/6xx
>     transaction
>     ERROR:tm:w_t_relay: t_forward_nonack failed
>
>
> What do you think about those errors? And how could I use the 6xx 
> replies (a 603 reply for example) to get my data and resend my INVITE ?
>
> Here is my routing logic (with 380 replies):
>
>     ####### Routing Logic ########
>
>
>     # main request routing logic
>
>     route{
>         if (!mf_process_maxfwd_header("10")) {
>             sl_send_reply("483","Too Many Hops");
>             exit;
>         }
>
>         if(is_method("INVITE")) {
>             if($rU=='1000') { 
>                 t_relay("x.x.x.x:5060"); # sending the INVITE to a SIP
>     server who answer with a 380 reply
>                
>                 t_on_failure("1");
>               
>                 exit;
>             }
>         }
>         else {
>             route(1);
>         }
>     }
>
>     failure_route[1] {
>         if(t_check_status("380")) {
>             xlog("$(<reply>hdr(via)[*])\r\n");
>             xlog("$(<reply>hdr(From)[*])\r\n");
>             xlog("$(<reply>hdr(To)[*])\r\n");
>             xlog("$(<reply>hdr(Call-ID)[*])\r\n");
>             xlog("$(<reply>hdr(CSeq)[*])\r\n");
>             xlog("$(<reply>hdr(Contact)[*])\r\n");
>             xlog("$(<reply>hdr(Error-Info)[*])\r\n");
>
>             append_hf("Error-Info: $(<reply>hdr(Error-Info)[*])\r\n");
>           
>             t_relay();
>          
>         }
>     }
>     route[1] {
>       
>         if (!t_relay()) {
>             sl_reply_error();
>             exit;
>         }
>     }
>
>
>
> ------------------------------------------------------------------------
> From: lebron_najib at hotmail.com
> To: users at lists.opensips.org
> Date: Tue, 5 Oct 2010 13:54:57 +0000
> Subject: Re: [OpenSIPS-Users] Adding data to a request before relaying it
>
> Hi Anca,
>
> Thank you for your quick response. It would be great if you can give 
> me your opinion on the routing logic that I made to respond to this 
> type of scenario:
>
> ---
> loadmodule "tm.so"
> loadmodule "textops.so"
> ...
> ---
> route{
>     if(is_method("INVITE")) {
>         t_relay("tcp:server_adress:5060");
>         t_on_failure("1");
>     }
> }
> failure_route[1] {
>     if(t_check_status("600") {
>         add_body("$<reply>rb)", "Data");
> # this function adds a body to a message or replace it if existing, 
> but I'm not sure I can use a pseudo-variable as a parameter
>         $(<request>rb) = $(<reply>rb);
> # another possibility and again I'm not sure that those are R/W variables
>         t_relay();
>     }
> }
>
> ------------------------------------------------------------------------
> Date: Tue, 5 Oct 2010 14:28:54 +0300
> From: anca at opensips.org
> To: users at lists.opensips.org
> Subject: Re: [OpenSIPS-Users] Adding data to a request before relaying it
>
> Hi Najib,
>
> >From failure route you can access also the reply - with the context 
> specification in front of the variable name - 
> http://www.opensips.org/Resources/DocsCoreVar. By default the message 
> that you have access to in failure route is the request.
> To send the Invite to another destination just set the $du and do 
> t_relay().
>
> Regards,
> -- 
> Anca Vamanu
> www.voice-system.ro <http://www.voice-system.ro>
>
>
>
>
> On 10/05/2010 01:12 PM, Najib Hara wrote:
>
>     Hi,
>
>     Probably , the best way is to use 302 replies, but I'm still
>     looking for a way to collect the data from these replies (or from
>     600 errors). Is there a function or a module who can handle it ?
>     I also need to get my INVITEs back so I could insert the collected
>     data in their bodies.  I know that The TM module can duplicate SIP
>     messages in memory, but how to deal with 2 messages at the same
>     time ?
>     As a memo, here are the steps:
>
>         * send the received INVITE to a server
>         * get a 302 reply from the server with data on the body
>         * collect the data from the 302 reply
>         * insert data on the INVITE
>         * resend it to the initial destination
>
>
>     Thanks
>
>     ------------------------------------------------------------------------
>     From: lebron_najib at hotmail.com <mailto:lebron_najib at hotmail.com>
>     To: users at lists.opensips.org <mailto:users at lists.opensips.org>
>     Date: Fri, 1 Oct 2010 13:24:07 +0000
>     Subject: Re: [OpenSIPS-Users] Adding data to a request before
>     relaying it
>
>     Thank you Anca, I'm working on it and I'll post the specific part
>     of the routing logic as soon as finished.
>
>     ------------------------------------------------------------------------
>     From: lebron_najib at hotmail.com <mailto:lebron_najib at hotmail.com>
>     To: users at lists.opensips.org <mailto:users at lists.opensips.org>
>     Subject: Adding data to a request before relaying it
>     Date: Fri, 1 Oct 2010 08:55:05 +0000
>
>     Hi everybody,
>
>     I'm a newer in the OpenSIPS world and I'm trying to learn how to
>     use it efficiently.
>     I'm working on a project where I have to modify incoming requests
>     before relaying them to their first destination.
>     By modifying, I mean sending those requests to a server which will
>     send back messages with the additional data to implement in the
>     requests.
>     The next step is to collect those informations from the responses
>     and add them to the initial requests which will be relayed to
>     their initial destination.
>     My question is: is OpenSIPS capable of doing this ?
>
>     For more detail, here is a scheme.
>
>     Thank you in advance for your responses
>




More information about the Users mailing list