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">
OPT_INDICATION = (1 << 1),
OPT_NOANSWER = (1 << 2),
OPT_TERMINATOR = (1 << 3),
+ OPT_KEEP_TERMINATOR = (1 << 4),
};
enum {
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";
}
} 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_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)
+ } 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);