Reputation: 4788
According to the RFC 3261, there is no timeout for server transactions in PROCEEDING or TRYING states. As I understand, that means that TU MUST send response to the transaction. However, if TU fails, there should be a way for transaction to know about that and terminate.
Which behavior is correct according to the RFC 3261?
Should server transaction detect TU failure?
Should I add my own timeout? Assuming that client transaction on the other side will time-out anyway, it should be safe to terminate server transaction after some timeout > expected client transaction timeout.
Any other behavior?
Upvotes: 1
Views: 2377
Reputation: 17132
The timeouts in the transactions are to handle remote failures - network partitions, the remote machine falling over, etc.
SIP doesn't tell you what to do in the event of a local failure, like your Transaction-User layer falling over.
Your TU's the "brain" of the entire SIP stack, so if it fails, your SIP stack fails as a whole. I don't think it's sensible for the transaction layer to attempt to continue functioning.
Some transactions might meaningfully persist across your application reboot - presence subscriptions, say - while others like calls probably can't. You might store the state of these "persistable" transactions on disk, and restore them after you restart your application.
Upvotes: 2