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.
--
Iñaki Baz Castillo
<ibc(a)aliax.net>