[Home]

Summary:ASTERISK-18403: transfer start ignore digittimout if ! in dialplan
Reporter:Alexander Merkulov (arheops)Labels:
Date Opened:2011-08-31 19:58:24Date Closed:2011-08-31 21:39:57
Priority:CriticalRegression?
Status:Closed/CompleteComponents:Core/PBX
Versions:1.8.5.0 Frequency of
Occurrence
Constant
Related
Issues:
Environment:Attachments:
Description:if A call B
if u have context
[internal]
exten => _!,1,Noop
exten => 100,1,Dial(Sip/100)

or similar,but with _!, for side B

when B do transfer it start do transfer on first digit. not wait second or other.

looks like issue is in main/app.c in function int ast_app_dtget
most likly it is in this lines

if (!ast_matchmore_extension(chan, context, collect, 1,
                       S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
                       break;
               }

but i can't test more deeply, becuase not know what it expect to do.

if replace context by
[internal]
exten => _.!,1,Noop; note i have added .
exten => 100,1,Dial(Sip/100)

then issue gone.
so i think it is something about ! work in dialplan matching
thats why i think it is CRYTICAL. i think it also used alot in other places of pbx core.

Comments:By: Alexander Merkulov (arheops) 2011-08-31 20:05:01.305-0500

tested on

[internal]
exten => h,1,Noop
exten => _!,1,Gosub(guess-fields,s,1)

; --- internal extensions ---
exten => _00X,2,Set(CDR(direction)=internal)
exten => _00X,3,Dial(SIP/7834-${EXTEN},,rtT)
exten => 009,3,Dial(SIP/7834-003&Local/15148309978,,rtT)
exten => 99,2,Answer
exten => 99,3,Playback(demo-echotest)
exten => 99,n,Echo

result:
   -- Executing [15144005206@default:2] Dial("SIP/74.55.75.30-00000009", "SIP/mtest,,rt") in new stack
...............removed by me
[Aug 31 21:00:42] DEBUG[18486]: features.c:2866 feature_interpret: Feature interpret: chan=SIP/74.55.75.30-00000009, peer=SIP/mtest-0000000a, code=#, sense=2, features=2, dynamic=#
[Aug 31 21:00:42] DEBUG[18486]: features.c:2750 feature_interpret_helper: Feature detected: fname=Blind Transfer sname=blindxfer exten=#
[Aug 31 21:00:42] DEBUG[18486]: res_rtp_asterisk.c:727 ast_rtp_update_source: Setting the marker bit due to a source update
   -- Started music on hold, class 'default', on SIP/74.55.75.30-00000009
[Aug 31 21:00:42] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (50 requested / 50 actual) timer ticks per second
[Aug 31 21:00:42] DEBUG[18486]: channel.c:5107 set_format: Set channel SIP/mtest-0000000a to write format gsm
[Aug 31 21:00:42] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (50 requested / 50 actual) timer ticks per second
   -- <SIP/mtest-0000000a> Playing 'pbx-transfer.gsm' (language 'en')
[Aug 31 21:00:42] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 0000000b (len = 4)
[Aug 31 21:00:42] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 0000000b (len = 4)
[Aug 31 21:00:42] DEBUG[18454]: channel.c:3597 ast_read_generator_actions: Generator got voice, switching to phase locked mode
[Aug 31 21:00:42] DEBUG[18454]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:42] DEBUG[18454]: channel.c:5107 set_format: Set channel SIP/74.55.75.30-00000009 to write format slin
[Aug 31 21:00:42] DEBUG[18454]: res_musiconhold.c:337 ast_moh_files_next: SIP/74.55.75.30-00000009 Opened file 0 '/var/lib/asterisk/moh/macroform-the_simplicity'
[Aug 31 21:00:42] DEBUG[18454]: res_rtp_asterisk.c:1063 ast_rtp_raw_write: Difference is 992, ms is 144
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: channel.c:5107 set_format: Set channel SIP/mtest-0000000a to write format ulaw
.............this line added by me in app.c to detect where it is and if timeout/len is ok
[Aug 31 21:00:43] NOTICE[18486]: app.c:129 ast_app_dtget: debug: timeout 3000000 maxlen 100

[Aug 31 21:00:43] DEBUG[18486]: channel.c:5107 set_format: Set channel SIP/mtest-0000000a to write format slin
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (50 requested / 50 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3597 ast_read_generator_actions: Generator got voice, switching to phase locked mode
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1675 ast_rtcp_read: Got RTCP report of 176 bytes
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1380 create_dtmf_frame: Sending dtmf: 57 (9), at 91.200.1.98:14838
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1424 process_dtmf_rfc2833: - RTP 2833 Event: 00000009 (len = 4)
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:1380 create_dtmf_frame: Sending dtmf: 57 (9), at 91.200.1.98:14838
...............this line added by  me to app.c to see response
[Aug 31 21:00:43] NOTICE[18486]: app.c:139 ast_app_dtget: debug:  res 57
[Aug 31 21:00:43] DEBUG[18486]: channel.c:5107 set_format: Set channel SIP/mtest-0000000a to write format ulaw
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:727 ast_rtp_update_source: Setting the marker bit due to a source update
   -- Stopped music on hold on SIP/74.55.75.30-00000009
[Aug 31 21:00:43] DEBUG[18486]: channel.c:5107 set_format: Set channel SIP/74.55.75.30-00000009 to write format ulaw
[Aug 31 21:00:43] DEBUG[18486]: channel.c:3480 ast_settimeout: Scheduling timer at (0 requested / 0 actual) timer ticks per second
[Aug 31 21:00:43] DEBUG[18486]: features.c:1906 builtin_blindtransfer: transferer=SIP/mtest-0000000a; transferee=SIP/74.55.75.30-00000009; lastapp=; lastdata=; chan=SIP/mtest-0000000a; dstchan=
[Aug 31 21:00:43] DEBUG[18486]: features.c:1909 builtin_blindtransfer: TRANSFEREE; lastapp=Dial; lastdata=SIP/mtest,,rt, chan=SIP/74.55.75.30-00000009; dstchan=SIP/mtest-0000000a
[Aug 31 21:00:43] DEBUG[18486]: features.c:1911 builtin_blindtransfer: transferer_real_context=internal; xferto=9
[Aug 31 21:00:43] DEBUG[18486]: features.c:1925 builtin_blindtransfer: ABOUT TO AST_ASYNC_GOTO, have a pbx... set HANGUP_DONT on chan=SIP/74.55.75.30-00000009
[Aug 31 21:00:43] DEBUG[18486]: channel.c:2807 ast_hangup: Hanging up channel 'SIP/mtest-0000000a'
[Aug 31 21:00:43] DEBUG[18486]: chan_sip.c:6096 sip_hangup: Hangup call SIP/mtest-0000000a, SIP callid 5821717341ec8f0d6627b4f05e8cc421@107.20.233.43:5060
[Aug 31 21:00:43] DEBUG[18486]: res_rtp_asterisk.c:2393 ast_rtp_remote_address_set: Setting RTCP address on RTP instance '0x8873c58'
[Aug 31 21:00:43] DEBUG[18486]: chan_sip.c:3325 __sip_xmit: Trying to put 'BYE sip:mte' onto UDP socket destined for 91.200.1.98:34686
[Aug 31 21:00:43] DEBUG[18486]: cdr_mysql.c:334 mysql_log: Inserting a CDR record.
[Aug 31 21:00:43] DEBUG[18486]: cdr_mysql.c:337 mysql_log: SQL command as follows: INSERT INTO cdr (`calldate`,`clid`,`src`,`dst`,`dcontext`,`channel`,`dstchannel`,`lastapp`,`lastdata`,`duration`,`billsec`,`disposition`,`amaflags`,`uniqueid`,`ip`,`direction`) VALUES ('2011-08-31 21:00:35','\"0000123456\" <0000123456>','0000123456','15144005206','default','SIP/74.55.75.30-00000009','SIP/mtest-0000000a','Dial','SIP/mtest,,rt','8','6','ANSWERED','3','1314838835.9','74.55.75.30','inbound')
[Aug 31 21:00:43] DEBUG[18486]: app_dial.c:2884 dial_exec_full: Exiting with DIALSTATUS=ANSWER.
[Aug 31 21:00:43] DEBUG[18486]: pbx.c:4083 pbx_extension_helper: Launching 'Gosub'
   -- Executing [9@internal:1] Gosub("SIP/74.55.75.30-00000009", "guess-fields,s,1") in new stack


By: Alexander Merkulov (arheops) 2011-08-31 20:05:45.849-0500

features.conf - default file from make samples

By: Richard Mudgett (rmudgett) 2011-08-31 21:38:58.405-0500

What you are describing is expected behavior for the ! pattern matching.  The ! matches zero or more and intentionally will not wait for more digits.  Once your dialed digits reaches the ! in the exten pattern the exten is matched.  The ! is useful for dial through requirements where the remaining digits are passed through to the network as they are dialed.