[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