El Martes, 17 de Marzo de 2009, Alex Balashov escribió:
The transaction was terminated when a branch replied a 200 (as RFC 3261 states).
Ahh. So, then why does the "reason" code for 487 say something like "transaction terminated," if the transaction has not existed for a long time?
487 comes from the branch_1, it's not generated by Kamailio!
The problem is: - Kamailio sends INVITE to branch_1. - After some seconds sends a CANCEL. - And sends the INVITE to branch_2. - branch_1 replies 200 for the CANCEL and 487 for the INVITE, Kamailio sends the ACK but the server ignores it and remains sending the same 487 for a while. - During that time, branch_2 replies 200 so Kamailio (accoprding to RFC 3261) terminates the transaction and forwards the 200 upstream. - After some seconds branch_1 sends a new 487 (due to the problem with the ACK). - This 487 has now no transaction in Kamailio so it forwards it stateless (by inspecting the Via header) to the client. - The client receives a 487 and decides to terminate the call.
Hope it's clear now :)