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

_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel

Reply via email to