[SR-Users] Hop by hop CANCEL, wrong to header
Vitaliy Aleksandrov
vitalik.voip at gmail.com
Fri May 25 09:45:15 CEST 2012
Hello Daniel,
Thanks for the reply.
Sorry i have made a typo. If E2E_CANCEL_HOP_BY_HOP is defined then
e2e_cancel() from t_fwd.c calls cancel_branch() function for each branch
it found at a t_invite transaction.
Then if cfg_get(tm, tm_cfg, reparse_invite) is true cancel_branch()
calls build_local_reparse() which returns new CANCEL request buffer
based on outgoing INVITE, but with original To header.
I've searched a bit deeper and found that if E2E_CANCEL_HOP_BY_HOP is
not defined e2e_cancel() calls e2e_cancel_branch(), which then calls
build_local_reparse() like in previous description when
E2E_CANCEL_HOP_BY_HOP was defined.
So the main question is why does kamailio take "To" field from a
transaction cell and not from outgoing buffer like it does with other
headers ?
I'm using kamailio-3.0.2, but i have checked 3.2.2 sources and haven't
found any changes at the functions mentioned above.
Cheers,
Vitaliy Aleksandrov
> Hello,
>
> On 5/23/12 5:22 PM, Vitaliy Aleksandrov wrote:
>> Hi all,
>>
>> I have a question about CANCEL message processing.
>>
>> My call sceraio:
>> When an INVITE request comes I need to rewrite a domain part of the
>> several headers(to, from, contact, SDP ip) according to the outgoing
>> interface.
>> I can do it before t_relay(), but when destination user has more then
>> one locations and they are reachable through different interfaces all
>> forked INVITEs will have the same domain.
>> To avoid that problem i have tried to move rewriting part(subst from
>> the textops module) to the branch_route.
>>
>> Unfortunately that solution didn't helped me, because "To" header of
>> the outgoing CANCEL messages is wrong (unchanged. as it was at the
>> moment when transaction was created by the t_relay() ).
>> As i understood from the documentation and mailing list kamailio
>> builds CANCEL based on outgoing INVITE.
>>
>> I did a small research and found that Kamailio really takes outgoing
>> INVITE from each branch (invite_transaction_cell ->
>> uac[b_id].request.buffer) and builds CANCEL (build_local_reparse()
>> from tm/t_msgbuilder.c) based on it.
>> But kamailio does an exception for the To header which is described
>> below:
>> ***cancel_branch* function (from t_cancel.c) calls
>> *build_local_reparse*() and fills one of the parameters with a
>> pointer to unmodified To header.
>> * build_local_reparse*() uses received To header to construct
>> outgoing CANCEL.
>>
>> I have changed:
>> cancel = build_local_reparse(t, branch, &len, CANCEL, CANCEL_LEN,
>> &t->to, reason);
>> to:
>> cancel = build_local_reparse(t, branch, &len, CANCEL, CANCEL_LEN,
>> NULL, reason);
>> and it works for me now.
>>
>> It looks like if E2E_CANCEL_HOP_BY_HOP *e2e_cancel()* (t_fwd.c) will
>> call *e2e_cancel_branch()* which works as i want instead of
>> *cancel_branch()*, but it is just my assumption.
>
> do you mean if E2E_CANCEL_HOP_BY_HOP is defined? I quick grep at this
> time showed it is defined in t_fwd.h...
>
> What is the version you are using?
>
> Cheers,
> Daniel
>
>>
>> Why does kamailio generate CANCEL requests in such a way ? Did i miss
>> something from the RFC3261 or kamailio documentation ?
>>
>> Thanks in advance for any help !
>>
>>
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
> --
> Daniel-Constantin Mierla -http://www.asipto.com
> http://twitter.com/#!/miconda -http://www.linkedin.com/in/miconda
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20120525/4a7998e4/attachment-0001.htm>
More information about the sr-users
mailing list