[reSIProcate-users] Postpone ACKs in proxies
Hi,
first of all, thanks for the great software! I'm using resip in a SIP proxy:
UAC <-> Proxy <-> UAS
Now, as call is being established, UAS sends OK to Proxy which
responds with ACK right ahead. Proxy then passes the OK to UAC, which
also responds with ACK. Proxy performs some nontrivial actions
(database calls, etc.) that might take some time (let's say up to 1
second in high load). Resip however sends the ACK right ahead, which
means that UAS start sending audio 1 second before UAC starts
accepting it.
According to RFC3261, [Page 123], Chapter 17 Transactions:
The 2xx response and its ACK receive special treatment. This
response is retransmitted only by a UAS, and its ACK generated only
by the UAC. This end-to-end treatment is needed so that a caller
knows the entire set of users that have accepted the call. Because
of this special handling, retransmissions of the 2xx response are
handled by the UA core, not the transaction layer. Similarly,
generation of the ACK for the 2xx is handled by the UA core. Each
proxy along the path merely forwards each 2xx response to INVITE and
its corresponding ACK.
As far as I know, ACK is sent even before OnEstablished() is called
(see dum/ClientInviteSession.cxx) and I can only amend its content in
OnReadyToSend(). Is there a way for me to comply with this?
Thanks!
Vladimir.