[Kamailio-Devel] How does Kamailio match an ACK for a stateless [3456]XX replied by Kamailio itself?
Iñaki Baz Castillo
ibc at aliax.net
Mon Dec 15 12:35:40 CET 2008
El Lunes, 15 de Diciembre de 2008, Alex Balashov escribió:
> No, Klaus is right. It's something in the to-tag:
>
> Check out sl_filter_ACK() in modules/sl/sl_funcs.c:
>
> if (msg->to) {
> tag_str = &(get_to(msg)->tag_value);
> if ( tag_str->len==TOTAG_VALUE_LEN )
> {
> /* calculate the variable part of to-tag */
> calc_crc_suffix(msg, tag_suffix);
> /* test whether to-tag equal now */
> if (memcmp(tag_str->s,sl_tag.s,sl_tag.len)==0) {
> LM_DBG("local ACK found -> dropping
> it!\n");
> if_update_stat( sl_enable_stats,
> rcv_acks, 1);
> run_sl_callbacks( SLCB_ACK_IN, msg, 0,
> 0, 0, 0 );
> return 0;
> }
> }
> }
>
>
> calc_crc_suffix() is defined in tags.h.
Thanks a lot for pointintg it out, but I don't understant why "To_tag" is
preferred over "branch".
During a dialog between alice and bob, alice could send several re-INVITE's
and for any reason the proxy could reject them stateless with a 403. All the
re-INVITE have the same "To_tag" so matching an ACK based on the "To_tag"
could be wrong, it could occur the following:
alice proxy bob
INVITE ----->
INVITE ----->
<--------- 200
<--------- 200
ACK -------->
ACK ------->
re-INVITE(1) ---->
X--- 403
re-INVITE(2) ---->
<----------- 403
ACK(2)----------->
So here, which re-INVITE is confirming ACK(2): re-INVITE(1) or re-INVITE(2)?
(both have same To_tag).
What about if the 403 for re-INVITE(1) arrives to alice *after* 403 for
re-INVITE(2)? Then alice will send two ACK with same To_tag but, of course,
different "branch". If just the To_tag is matched, the second ACK will not
match its re-INVITE.
Am I wrong?
--
Iñaki Baz Castillo
More information about the Devel
mailing list