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