[asterisk-dev] [Code Review] Don't set up a call forward when receiving a 482 Loop Detected
Mark Michelson
mmichelson at digium.com
Tue Jul 6 17:02:32 CDT 2010
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/764/#review2336
-----------------------------------------------------------
Ship it!
Aside from the cosmetic issue below, this looks like a fine change. Good job, Terry!
/branches/1.4/channels/chan_sip.c
<https://reviewboard.asterisk.org/r/764/#comment5135>
Nitpick: The comment does not line up with the other comments in this section.
- Mark
On 2010-07-06 16:02:13, Terry Wilson wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/764/
> -----------------------------------------------------------
>
> (Updated 2010-07-06 16:02:13)
>
>
> Review request for Asterisk Developers and Mark Michelson.
>
>
> Summary
> -------
>
> I have noticed an issue where if we make an outbound SIP call which is responded to with a 482 Loop Detected, instead of failing the call and letting the dialplan handle the error, we instead set chan->call_forward to a Local channel at the callers context with the extension that they were dialing. I can't think of a reason why we would want to do this. It makes it impossible to handle the error in any meaningful way. It appears Asterisk has done this since r3662:
>
> $ svn log -r 3662
> ------------------------------------------------------------------------
> r3662 | markster | 2004-08-26 20:16:16 -0700 (Thu, 26 Aug 2004) | 2 lines
>
> When detecting a hairpin, redirect to the appropriate local extension (bug #1974)
>
>
> (bug #1974 doesn't seem to be related, btw)
>
> The code also has the note:
> /* \note SIP is incapable of performing a hairpin call, which
> is yet another failure of not having a layer 2 (again, YAY
> IETF for thinking ahead). So we treat this as a call
> forward and hope we end up at the right place... */
>
> which is clearly incorrect as RFC 3261 talks about how to handle spiralin, but if a *loop* (not a spiral) is detected by the destination, it is an error condition and I think should be treated as such. It is always "fun" changing behavior that "has always been there" but in my opinion this is just clearly wrong behavior.
>
> This patch for 1.4 adds the sip option forwardloopdetected which defaults to yes (the old behavior). For trunk, I would just delete the existing behavior.
>
>
> Diffs
> -----
>
> /branches/1.4/channels/chan_sip.c 274242
> /branches/1.4/configs/sip.conf.sample 274242
>
> Diff: https://reviewboard.asterisk.org/r/764/diff
>
>
> Testing
> -------
>
> I have tested that the options are properly set and reported via 'sip show settings' and 'sip show peer'. Dialing out and receiving a 482 with no option set results in the old behavior and with it set results in immediately continuing in the dialplan with HANGUPCAUSE=127 and DIALSTATUS=CONGESTION.
>
>
> Thanks,
>
> Terry
>
>
More information about the asterisk-dev
mailing list