[asterisk-bugs] [Asterisk 0014644]: Asterisk should transform SIP 503 code to SIP 500
Asterisk Bug Tracker
noreply at bugs.digium.com
Thu Mar 12 04:01:20 CDT 2009
A NOTE has been added to this issue.
======================================================================
http://bugs.digium.com/view.php?id=14644
======================================================================
Reported By: ibc
Assigned To:
======================================================================
Project: Asterisk
Issue ID: 14644
Category: Channels/chan_sip/Interoperability
Reproducibility: always
Severity: major
Priority: normal
Status: new
Asterisk Version: 1.4.23
Regression: No
SVN Branch (only for SVN checkouts, not tarball releases): N/A
SVN Revision (number only!):
Request Review:
======================================================================
Date Submitted: 2009-03-11 11:08 CDT
Last Modified: 2009-03-12 04:01 CDT
======================================================================
Summary: Asterisk should transform SIP 503 code to SIP 500
Description:
Hi, in the following simple dialplan:
exten => _X.,1,Dial(SIP/trunk1/${EXTEN})
exten => _X.,n,Hangup
In case the trunk1 replies "SIP/2.0 503 Service Unavailable" Asterisk uses
the same SIP code to reply upstream. Asterisk shouldn't do it and MUST
convert that 503 into 500.
503 means that a client receiving it should try the same request against
an alternate server (got via DNS SRV and so).
This is "clearly" defined is RFC 3261:
-----------------------
21.5.4 503 Service Unavailable
[...]
A client (proxy or UAC) receiving a 503 (Service Unavailable) SHOULD
attempt to forward the request to an alternate server. It SHOULD NOT
forward any other requests to that server for the duration specified
in the Retry-After header field, if present.
-----------------------
Since Asterisk keep the 503 and replies it to the client, Asterisk breaks
the SIP failover mechanism, since it forces a client to contact an
alternate server when it's not needed at all (Asterisk is still alive and
working).
The correct behaviour is easy: When Asterisk receives a 503 from leg_B it
must convert it to 500 in leg_A.
======================================================================
----------------------------------------------------------------------
(0101611) ibc (reporter) - 2009-03-12 04:01
http://bugs.digium.com/view.php?id=14644#c101611
----------------------------------------------------------------------
@mmichelson: Thanks a lot for the patch, I'll try ASAP (however I don't use
1.6 so in case it's doesn't work in 1.4.23 I must adapt it).
About the confidence in this behaviour I can sure you that it's the
correct one, also implemented in some proxies as OpenSer/Kamailio/OpenSips
(503 from downstream is converted to 500 before ruting upstream).
The point here is that a *working* PBX/proxy shouldn't reply a 503 to the
caller since 503 forces the caller to try an alternate server (got
previously via DNS SRV).
About the AST_CONTROL_CONGESTION reaction on Asterisk, I agree with you:
500 should be replied instead of 503. At least 500 would be a better
response. I will open a new bug for it.
Thanks a lot.
Issue History
Date Modified Username Field Change
======================================================================
2009-03-12 04:01 ibc Note Added: 0101611
======================================================================
More information about the asterisk-bugs
mailing list