mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	app_read: Add an option to return terminator on empty digits.
Adds 'e' option to allow Read() to return the terminator as the dialed digits in the case where only the terminator is entered. ie; if "#" is entered, return "#" if the 'e' option is set and "" if it is not. ASTERISK-30411 Change-Id: I49f3221824330a193a20c660f99da0f1fc2cbbc5
This commit is contained in:
		
				
					committed by
					
						 George Joseph
						George Joseph
					
				
			
			
				
	
			
			
			
						parent
						
							66f6d9113e
						
					
				
				
					commit
					fc5b7ab459
				
			| @@ -85,6 +85,13 @@ | ||||
| 						and you will need to rely on duration and max digits | ||||
| 						for ending input.</para> | ||||
| 					</option> | ||||
| 					<option name="e"> | ||||
| 						<para>to read the terminator as the digit string if the | ||||
| 						only digit read is the terminator. This is for cases | ||||
| 						where the terminator is a valid digit, but only by itself. | ||||
| 						ie; <literal>1234</literal> and <literal>#</literal> are | ||||
| 						valid, but <literal>1234#</literal> is not.</para> | ||||
| 					</option> | ||||
| 				</optionlist> | ||||
| 			</parameter> | ||||
| 			<parameter name="attempts"> | ||||
| @@ -125,6 +132,7 @@ enum read_option_flags { | ||||
| 	OPT_INDICATION = (1 << 1), | ||||
| 	OPT_NOANSWER = (1 << 2), | ||||
| 	OPT_TERMINATOR = (1 << 3), | ||||
| 	OPT_KEEP_TERMINATOR = (1 << 4), | ||||
| }; | ||||
|  | ||||
| enum { | ||||
| @@ -138,6 +146,7 @@ AST_APP_OPTIONS(read_app_options, { | ||||
| 	AST_APP_OPTION('i', OPT_INDICATION), | ||||
| 	AST_APP_OPTION('n', OPT_NOANSWER), | ||||
| 	AST_APP_OPTION_ARG('t', OPT_TERMINATOR, OPT_ARG_TERMINATOR), | ||||
| 	AST_APP_OPTION('e', OPT_KEEP_TERMINATOR), | ||||
| }); | ||||
|  | ||||
| static char *app = "Read"; | ||||
| @@ -261,12 +270,20 @@ static int read_exec(struct ast_channel *chan, const char *data) | ||||
| 				} | ||||
| 			} else { | ||||
| 				res = ast_app_getdata_terminator(chan, arglist.filename, tmp, maxdigits, to, terminator); | ||||
| 				if (res == AST_GETDATA_COMPLETE || res == AST_GETDATA_EMPTY_END_TERMINATED) | ||||
| 				if (res == AST_GETDATA_COMPLETE) { | ||||
| 					status = "OK"; | ||||
| 				else if (res == AST_GETDATA_TIMEOUT) | ||||
| 				} else if (res == AST_GETDATA_EMPTY_END_TERMINATED) { | ||||
| 					if (ast_test_flag(&flags, OPT_KEEP_TERMINATOR)) { | ||||
| 						/* if the option is set to do so, read the | ||||
| 						   returned string as the terminator string */ | ||||
| 						ast_copy_string(tmp, terminator, sizeof(tmp)); | ||||
| 					} | ||||
| 					status = "OK"; | ||||
| 				} else if (res == AST_GETDATA_TIMEOUT) { | ||||
| 					status = "TIMEOUT"; | ||||
| 				else if (res == AST_GETDATA_INTERRUPTED) | ||||
| 				} else if (res == AST_GETDATA_INTERRUPTED) { | ||||
| 					status = "INTERRUPTED"; | ||||
| 				} | ||||
| 			} | ||||
| 			if (res > -1) { | ||||
| 				pbx_builtin_setvar_helper(chan, arglist.variable, tmp); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user