Summary: | ASTERISK-18403: transfer start ignore digittimout if ! in dialplan | ||
Reporter: | Alexander Merkulov (arheops) | Labels: | |
Date Opened: | 2011-08-31 19:58:24 | Date Closed: | 2011-08-31 21:39:57 |
Priority: | Critical | Regression? | |
Status: | Closed/Complete | Components: | 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. |