Hi, I would like to insist in the 408 problem when it's locally generated due to fr_timer timeout in SIP UDP. Let's suppose this very simple example:
- Call from UAC to proxy. - Proxy routes it to a gateway (no failover to other gateways).
3 cases:
a) Gateway replies 408, so TM selects 408 (OK).
b) Provisional responses are received but fr_inv_timer expires, so TM generates a local 408. The client receives 408 (OK).
c) No reponse at all from gateway so fr_timer expires and TM generates a local 408. The client receives 408 (WRONG).
Obviously in case "c" it doesn't make sense to send a 408 to the client as the fact is that the gateway is unreachable, so a 500 should be replied to the client.
So what is the problem? In case "c" there should be a "transport error". According to RFC 3261 if an UDP transaction gets a ICMP "port unreachable" it should generate a local 503. And if it receives no UDP reply at all (neither an ICMP notification) then it should generate a local 408.
Problems with this: - SR doesn't rely on received ICMP (it neither receives them AFAIK). - If the gateway is down there will be not a ICMP message (neither if the gateway TCP/IP stack doesn't generate such ICMP notifications).
So with the current TM design an UDP transport error just can cause a local 408, and never a 503. This is the main problem.
Unfortunatelly such 408 is painful as the examples above show. This is the reason I propose TM to generate a local 503 if no response at all is received for a UDP requests (when fr_timer expires).
More or less the same info in this report: http://sip-router.org/tracker/index.php?do=details&task_id=55
Regards.