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 :)
--
Iñaki Baz Castillo