[OpenSIPS-Devel] CANCELs and negative ACKs are constructed from the outgoing INVITE ?

Bogdan-Andrei Iancu bogdan at voice-system.ro
Thu Oct 9 17:23:21 CEST 2008


Hi Noman,

How do you change the FROM and TO headers ? because you need to preserve 
the transaction integrity....

For From header, OpenSIPS offers uac_replace_from() - 
http://www.opensips.org/html/docs/modules/1.4.x/uac.html - which does a 
proper job.

Regards,
Bogdan

Noman Siddiqui wrote:
> Hi Bogdan,
>
> Thanks for looking into this. Yes, the problem is when the From and To 
> headers are changed in the outgoing INVITE and the CANCEL comes in and 
> we try to send the CANCEL out using t_relay, it picks up the To and 
> From headers from the original incoming INVITE. Trying to change the 
> headers in the CANCEL also doesn't work as the outgoing CANCEL is 
> getting built locally afterwards:
> cancel_branch(t, branch )
> .. build_cancel(t, branch, &len)
> ..... build_local( Trans, branch, len,CANCEL, CANCEL_LEN, &Trans->to )
>
> In case of negative ACK To Header is updated but the From header is not.
>
> Thanks,
> Noman
>
> ----Original Message Follows----
> From: Bogdan-Andrei Iancu <bogdan at voice-system.ro>
> To: Noman Siddiqui <nomansi at hotmail.com>
> CC: devel at lists.opensips.org
> Subject: Re: [OpenSIPS-Devel] CANCELs and negative ACKs are 
> constructed from the    outgoing INVITE ?
> Date: Thu, 09 Oct 2008 12:05:51 +0300
>
> Hi Noman,
>
> There is no similar functionality because there is no need - the 
> CANCELs and local ACKs are build based on the received INVITEs, but 
> taking into consideration the changes that were applied on the INVITE 
> (like changing FROM hdr, ROUTE headers, etc).
>
> Have you spotted a functionality bug - some info that is not updated?
>
> Regards,
> Bogdan
>
> Noman Siddiqui wrote:
>> Hi All,
>>
>> Does anyone know if the support for reparse_invite tm configuration 
>> and tm_relay_cancel is present in openSER-1.3.1 or later releases.
>>
>> I found the related patch SER-212 
>> (http://lists.iptel.org/pipermail/serdev/2007-May/010212.html) to fix 
>> the issue with CANCEL and negative ACK being built using the incoming 
>> INVITE instead of outgoing INVITE. However, I searched through the 
>> 1.3.1 openSER codebase and couldn't find this or similar feature. If 
>> its covered through some other feature then kindly provide more 
>> details. If its not already there then is there any enhancement 
>> request already in place to cover this or does it require new feature 
>> request to be opened ?
>>
>> Here is the pacth detail of SER-212:
>> http://lists.iptel.org/pipermail/serdev/2007-May/010212.html
>> ===================
>>   SER CVS Repository
>>
>>   Modified files:
>>     modules/tm           t_cancel.c t_fwd.c t_fwd.h t_msgbuilder.c
>>                          t_msgbuilder.h t_reply.c tm.c
>>   Added files:
>>     modules/tm           lw_parser.c lw_parser.h
>>   Log:
>>   CANCELs and negative ACKs are constructed from the INVITE which was 
>> sent out
>>   instead of building them from the received one. The disadvantage is
>>   that the outgoing INVITE has to be partially reparsed, the 
>> advantage is that
>>   the CANCEL/ACK is always RFC-compliant, it always contains the same 
>> route-set
>>   as the INVITE message. (closes SER-212)
>>
>>   build_local_reparse() function can be used to construct a CANCEL or 
>> ACK, it
>>   reparses the outgoing INVITE and applies the modifications 
>> specified by the RFC.
>>
>>   new module parameters:
>>    - reparse_invite: set it to 0 in order to revert to the old 
>> behaviour)
>>    - ac_extra_hdrs: prefix for additional headers which are kept by 
>> build_local_reparse()
>>
>>   new script function:
>>    - t_relay_cancel() - can be used to catch CANCEL requests at the 
>> beginning of the script
>>                         and bypass the rest of the script processing:
>>
>>   if (!t_relay_cancel()) {  # implicit drop if relaying was successful,
>>                             # nothing to do
>>
>>           # corresponding INVITE transaction found but error occurred
>>           sl_reply("500", "Internal Server Error");
>>           drop;
>>   }
>>   # bad luck, corresponding INVITE transaction is missing,
>>   # do the same as for INVITEs
>>   ...
>>
>>   Revision  Changes    Path
>>   1.1       +258 -0    sip_router/modules/tm/lw_parser.c (new)
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/lw_parser.c?rev=1.1&content-type=text/plain 
>>
>>   1.1       +46 -0     sip_router/modules/tm/lw_parser.h (new)
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/lw_parser.h?rev=1.1&content-type=text/plain 
>>
>>   1.23      +12 -3     sip_router/modules/tm/t_cancel.c
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_cancel.c.diff?r1=1.22&r2=1.23 
>>
>>   1.87      +64 -2     sip_router/modules/tm/t_fwd.c
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_fwd.c.diff?r1=1.86&r2=1.87 
>>
>>   1.15      +2 -1      sip_router/modules/tm/t_fwd.h
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_fwd.h.diff?r1=1.14&r2=1.15 
>>
>>   1.46      +161 -1    sip_router/modules/tm/t_msgbuilder.c
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_msgbuilder.c.diff?r1=1.45&r2=1.46 
>>
>>   1.18      +7 -1      sip_router/modules/tm/t_msgbuilder.h
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_msgbuilder.h.diff?r1=1.17&r2=1.18 
>>
>>   1.140     +14 -3     sip_router/modules/tm/t_reply.c
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_reply.c.diff?r1=1.139&r2=1.140 
>>
>>   1.153     +23 -1     sip_router/modules/tm/tm.c
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/tm.c.diff?r1=1.152&r2=1.153 
>>
>> =============================
>>
>> Thanks and appreciate your help.
>>
>>
>>
>> _______________________________________________
>> Devel mailing list
>> Devel at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>>
>>
>
>
>




More information about the Devel mailing list