Douglas Garstang
2005-Dec-09 22:23 UTC
[Asterisk-Users] Dial Command Doesn't return Correctly! (Bug?)
I have a really really weird problem here!
I'm trying to dial a proxy server, and when that fails, dial another, and
finally take some action such as play a sound file.
I found that if the proxy server isn't up, Asterisk returns a CONGESTION on
the channel, and if the proxy server is up but returns a "404 Not
Found", Asterisk returns CHANUNAVAIL.
So, I tried to write some logic around that.
When I issue the first dial command, and the proxy server isn't up or
returns a "Not Found", Asterisk ***immediately returns control*** and
jumps to the CONGESTION or CHANUNAVAIL paths. It then goes on to dial the second
proxy server. This proxy server is NOT RUNNING, but Asterisk doesn't
immediately return like it did for the first one. It just keeps sending INVITES
every few seconds until the 20s dial timeout is up. When that timeout expires it
displays on the console that the channel was NOANSWER. This is wrong!!!
Also, when asterisk immediately returns after the first dial command fails, it
displays the following on the console:
"Unable to create channel of type 'SIP' (cause 3 - No route to
destination"
Good! But on the SECOND dial, it does not display this. As I said, it just keeps
sending INVITE's to a system that is down (CHANUNAVAIL) for the full 20s and
then returns status NOANSWER.
Why is it doing this? Arrgh!
Files pasted below.
Help would be very much appreciated!
extensions.conf:
[test]
exten => _1.,1,NoOp(Calling macro DialProxy)
exten => _1.,n,Macro(DialProxy,${EXTEN})
[macro-DialProxy];
exten => s,1,Dial(SIP/${ARG1}@proxy1,20,tr
<mailto:SIP/${ARG1}@proxy1,20,tr> )
exten => s,2,Goto(s-${DIALSTATUS},1) ; Gets excuted
as it should, because
exten => s-CONGESTION,1,Goto(s,20)
exten => s-CHANUNAVAIL,1,Goto(s,20)
exten => s,20,Dial(SIP/${ARG1}@proxy2,20,tr
<mailto:SIP/${ARG1}@proxy2,20,tr> )
exten => s,21,Goto(s2-${DIALSTATUS},1) ; Never gets
executed eventhough channel is CHANUNAVAIL. Why???
exten => s2-CONGESTION,1,Playback(all-outgoing-lines-unavailable)
exten => s2-CHANUNAVAIL,1,Playback(all-outgoing-lines-unavailable)
sip.conf:
[proxy1]
type=peer
context=test
host=192.168.10.24
insecure=very
qualify=yes
[proxy2]
type=peer
context=test
host=192.168.10.25
insecure=very
qyalify=yes
Douglas Garstang
2005-Dec-09 22:29 UTC
[Asterisk-Users] RE: Dial Command Doesn't return Correctly! (Bug?)
Oops.
Worked it out. I misspelled 'qualify' for the second proxy server. I did
not realise you need to have qualify= on a SIP peer to be able to get
${DIALSTATUS} for it. Lucky I had it in there at all, otherwise I would have
given up on this approach quick smart. DOCUMENTATION WOULD BE NICE!
-----Original Message-----
From: Douglas Garstang
Sent: Fri 12/9/2005 10:23 PM
To: Asterisk Users Mailing List - Non-Commercial Discussion;
asterisk-users@lists.digium.com
Cc:
Subject: Dial Command Doesn't return Correctly! (Bug?)
I have a really really weird problem here!
I'm trying to dial a proxy server, and when that fails, dial another, and
finally take some action such as play a sound file.
I found that if the proxy server isn't up, Asterisk returns a CONGESTION on
the channel, and if the proxy server is up but returns a "404 Not
Found", Asterisk returns CHANUNAVAIL.
So, I tried to write some logic around that.
When I issue the first dial command, and the proxy server isn't up or
returns a "Not Found", Asterisk ***immediately returns control*** and
jumps to the CONGESTION or CHANUNAVAIL paths. It then goes on to dial the second
proxy server. This proxy server is NOT RUNNING, but Asterisk doesn't
immediately return like it did for the first one. It just keeps sending INVITES
every few seconds until the 20s dial timeout is up. When that timeout expires it
displays on the console that the channel was NOANSWER. This is wrong!!!
Also, when asterisk immediately returns after the first dial command fails, it
displays the following on the console:
"Unable to create channel of type 'SIP' (cause 3 - No route to
destination"
Good! But on the SECOND dial, it does not display this. As I said, it just
keeps sending INVITE's to a system that is down (CHANUNAVAIL) for the full
20s and then returns status NOANSWER.
Why is it doing this? Arrgh!
Files pasted below.
Help would be very much appreciated!
extensions.conf:
[test]
exten => _1.,1,NoOp(Calling macro DialProxy)
exten => _1.,n,Macro(DialProxy,${EXTEN})
[macro-DialProxy];
exten => s,1,Dial(SIP/${ARG1}@proxy1,20,tr
<mailto:SIP/${ARG1}@proxy1,20,tr> )
exten => s,2,Goto(s-${DIALSTATUS},1) ; Gets excuted
as it should, because
exten => s-CONGESTION,1,Goto(s,20)
exten => s-CHANUNAVAIL,1,Goto(s,20)
exten => s,20,Dial(SIP/${ARG1}@proxy2,20,tr
<mailto:SIP/${ARG1}@proxy2,20,tr> )
exten => s,21,Goto(s2-${DIALSTATUS},1) ; Never gets
executed eventhough channel is CHANUNAVAIL. Why???
exten => s2-CONGESTION,1,Playback(all-outgoing-lines-unavailable)
exten => s2-CHANUNAVAIL,1,Playback(all-outgoing-lines-unavailable)
sip.conf:
[proxy1]
type=peer
context=test
host=192.168.10.24
insecure=very
qualify=yes
[proxy2]
type=peer
context=test
host=192.168.10.25
insecure=very
qyalify=yes