Summary:ASTERISK-07360: Callee's sip response TEMPORARILY_UNAVAILABLE (480) makes asterisk estabilish the connection and send congestion tone
Reporter:dankleis (dankleis)Labels:
Date Opened:2006-07-19 03:41:44Date Closed:2006-11-12 15:12:08.000-0600
Versions:Frequency of
Environment:Attachments:( 0) Case__1_480_2-1.log
( 1) Case__2_486_2-1.log
Description:Suppose we have two sip clients registered to asterisk. Client A sends an INVITE message to Client B through asterisk. Client B replies with a TEMPORARILY_UNAVAILABLE (480) message in order to reject the invite. When asterisk receives the TEMPORARILY_UNAVAILABLE message it sends to Client A a 200 (OK) message and estabilishes the connection. After that, asterisk sends the congestion tone into the RTP stream and hangup the connection with a BYE request.
Otherwise, if the Client B replies to the INVITE with a BUSY_HERE (486) message, when asterisk receives this message it sends to Client A a SESSION_PROGRESS (183) message, sends the busy tone WITHOUT estabilishing the connection and then closes the RTP stream with a BUSY_HERE (486) message.

The problem is the different behaviour between two cases: in the first case the call is not rejected but successfully connected (with a billing time). So we register wrong information in cdr and client hears wrong signaling (congestion tone).


This is the executed macro:

exten = s,1,Set(EXTENSION=${CUT(ARG1,/,2)})
exten = s,n,GotoIf(${EXISTS(${DB(DND/${EXTENSION})})}?s-BUSY,1)  
exten = s,n,GotoIf(${EXISTS(${DB(CFU/${EXTENSION})})}?${MACRO_CONTEXT},${DB(CFU/${ARG1})},1)
exten = s,n,Dial(${ARG1},20,gtTwW)
exten = s,n,Goto(s-${DIALSTATUS},1)

exten = s-ANSWER,1,Playtones(congestion)
exten = s-NOANSWER,n,GotoIf(${EXISTS(${DB(VM/${EXTENSION})})}?skip-vm)
exten = s-NOANSWER,n,Voicemail(u${EXTENSION})
exten = s-NOANSWER,n(skip-vm),Playtones(congestion)

exten = s-BUSY,1,GotoIf(${EXISTS(${DB(CFB/${EXTENSION})})}?${MACRO_CONTEXT},${DB(CFB/${ARG1})},1)
exten = s-BUSY,n,GotoIf(${EXISTS(${DB(VM/${EXTENSION})})}?skip-vm)
exten = s-BUSY,n,MailboxExists(${EXTENSION})
exten = s-BUSY,n,NoOp(MailboxExists(${EXTENSION}): ${VMBOXEXISTSSTATUS})
exten = s-BUSY,n,GotoIf($["${VMBOXEXISTSSTATUS}"="SUCCESS"]?:skip-vm)
exten = s-BUSY,n,Voicemail(b${EXTENSION}) ;If busy, send to voicemail w/ busy announce
exten = s-BUSY,n,Playtones(congestion) ;Voicemail exited, play congestion
exten = s-BUSY,n,MacroExit
exten = s-BUSY,n(skip-vm),Playtones(busy) ;If voicemail doesn't exist,play busy

exten = _s-.,1,Goto(s-NOANSWER,1) ;Treat anything else as no answer
exten = a,1,VoicemailMain(${EXTENSION}) ;If they press *, send the user into VoicemailMain
Comments:By: Serge Vecher (serge-v) 2006-07-19 08:30:31

we also need to see the debug output.

Please do the following:
1) Prepare test environment (reduce the ammount of unrelated traffic on the server);
2) Make sure your logger.conf has the following line:
  console => notice,warning,error,debug
3) restart Asterik.
4) Enable SIP transaction logging with the following CLI commands:
set debug 4
set verbose 4
sip debug
5) Save complete console log to file and _attach_ said file to the bug.

By: dankleis (dankleis) 2006-07-19 09:40:27

plese delete file "Case_ 1_480_2.log" cose it's wrong

By: alexb (alexb) 2006-07-25 09:41:40

This issue apply to eyeBeam softphone (i.e. client B in the example above).
Any idea about the correct behaviour should be for Asterisk/eyeBeam, please?

Please look at the following thread http://support.counterpath.net/viewtopic.php?t=7030 on Counterpath forum.


By: jmls (jmls) 2006-11-01 10:27:36.000-0600

danKleis, could you provide the debug output as requested ? Thanks

By: Olle Johansson (oej) 2006-11-12 15:11:44.000-0600

In your dialplan, you use "playtones" instead of just issuing "busy" or "congestion". Playtones will open a channel instead of indicate to the phone. Change your dialplan and it will work properly.

This is not a bug, it's a poor configuration.