[Devel] fifo_t_reply bug ?

elias elias.baixas at voztele.com
Wed May 10 20:24:41 CEST 2006


Hi all, I think I've found a bug regarding the fifo command 
fifo_t_reply... the thing is that the INVITE transaction is put on wait 
twice. Here's how it goes:
When one replies an INVITE with a success (200) response, this is (more 
or less) the backtrace:
   fifo_t_reply -> t_reply_with_body -> set_final_timer -> put_on_wait

then, when the ACK is received, the backtrace at t_newtran() is:
   t_newtran -> t_release_transaction -> put_on_wait

in t_newtran, t_lookup_request() returns 1 because the ACK is local, so 
t_newtran does a t_release_transaction, putting it on wait for second 
time. So the transaction stays in the wait list forever.

Am I missing anything ?

the solution would be changing t_newtran from:

       if (lret>0) {
                if (p_msg->REQ_METHOD==METHOD_ACK) {
                        t_release_transaction(T);
                } else {
                        t_retransmit_reply(T);
                }
                /* things are done -- return from script */
                return 0;
        }

to:

       if (lret>0) {
                if (p_msg->REQ_METHOD==METHOD_ACK && 
T->relaied_reply_branch != -2) {
                        t_release_transaction(T);
                } else {
                        t_retransmit_reply(T);
                }
                /* things are done -- return from script */
                return 0;
        }

because relaied_reply_branch==-2 signals that a UAS transaction is 
locally replied.

regards,

Elias



More information about the Devel mailing list