[reSIProcate] some bugs in TransactionState related to Transaction Termination
In adding regression tests for repro using tfm, I've found some
<likely> bugs in TransactionState related to notification of client
and server transaction termination. Can somebody please comment:
Three cases in particular appear to be incorrect:
1) ServerInviteTransaction
- receive a 2xx from TU
- currently terminates ServerTransaction
- should wait until TimerStaleServer fires to terminate transaction
since there could be multiple 2xx (retransmissions or forking)
2) ServerInviteTransaction
- receive ACK from wire on reliable transport
- currently terminates the ServerTransaction
- even if this hop is reliable we could still receive multiple 2xx
which will each generate an ACK so we need to wait for
TimerStaleServer to fire to terminate the server transaction
3) ClientInviteTransaction
- receive a 2xx from wire
- currently terminates ClientTransaction
- should wait until TimerStaleClient fires since we could get multiple
2xx (either due to retransmissions or forking)
- requires adding a call to terminateClientTransaction in
processClientStale on TimerStaleClient