diff options
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | apps/app_readexten.c | 62 | ||||
-rw-r--r-- | funcs/func_dialplan.c | 75 |
3 files changed, 71 insertions, 67 deletions
@@ -145,6 +145,7 @@ Dialplan Functions for a given string to replace with another string as many times as the user specifies or just throughout the whole string. * Added option to CHANNEL(pickupgroup) allow reading and setting the pickupgroup of channel. + * Mark VALID_EXTEN() deprecated in favor of DIALPLAN_EXISTS() libpri channel driver (chan_dahdi) DAHDI changes -------------------------- diff --git a/apps/app_readexten.c b/apps/app_readexten.c index 94dc1e1f8..479211911 100644 --- a/apps/app_readexten.c +++ b/apps/app_readexten.c @@ -96,24 +96,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") </variablelist> </description> </application> - <function name="VALID_EXTEN" language="en_US"> - <synopsis> - Determine whether an extension exists or not. - </synopsis> - <syntax> - <parameter name="context"> - <para>Defaults to the current context</para> - </parameter> - <parameter name="extension" required="true" /> - <parameter name="priority"> - <para>Priority defaults to <literal>1</literal>.</para> - </parameter> - </syntax> - <description> - <para>Returns a true value if the indicated <replaceable>context</replaceable>, - <replaceable>extension</replaceable>, and <replaceable>priority</replaceable> exist.</para> - </description> - </function> ***/ enum readexten_option_flags { @@ -280,57 +262,15 @@ static int readexten_exec(struct ast_channel *chan, const char *data) return status[0] == 'H' ? -1 : 0; } -static int acf_isexten_exec(struct ast_channel *chan, const char *cmd, char *parse, char *buffer, size_t buflen) -{ - int priority_int; - AST_DECLARE_APP_ARGS(args, - AST_APP_ARG(context); - AST_APP_ARG(extension); - AST_APP_ARG(priority); - ); - - AST_STANDARD_APP_ARGS(args, parse); - - if (ast_strlen_zero(args.context)) - args.context = chan->context; - - if (ast_strlen_zero(args.extension)) { - ast_log(LOG_WARNING, "Syntax: VALID_EXTEN([<context>],<extension>[,<priority>]) - missing argument <extension>!\n"); - return -1; - } - - if (ast_strlen_zero(args.priority)) - priority_int = 1; - else - priority_int = atoi(args.priority); - - if (ast_exists_extension(chan, args.context, args.extension, priority_int, - S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) { - ast_copy_string(buffer, "1", buflen); - } else { - ast_copy_string(buffer, "0", buflen); - } - - return 0; -} - -static struct ast_custom_function acf_isexten = { - .name = "VALID_EXTEN", - .read = acf_isexten_exec, -}; - static int unload_module(void) { int res = ast_unregister_application(app); - res |= ast_custom_function_unregister(&acf_isexten); - - return res; + return res; } static int load_module(void) { int res = ast_register_application_xml(app, readexten_exec); - res |= ast_custom_function_register(&acf_isexten); return res; } diff --git a/funcs/func_dialplan.c b/funcs/func_dialplan.c index c39b3e376..06ba583c1 100644 --- a/funcs/func_dialplan.c +++ b/funcs/func_dialplan.c @@ -51,11 +51,29 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") <para>This function returns <literal>1</literal> if the target exits. Otherwise, it returns <literal>0</literal>.</para> </description> </function> - + <function name="VALID_EXTEN" language="en_US"> + <synopsis> + Determine whether an extension exists or not. + </synopsis> + <syntax> + <parameter name="context"> + <para>Defaults to the current context</para> + </parameter> + <parameter name="extension" required="true" /> + <parameter name="priority"> + <para>Priority defaults to <literal>1</literal>.</para> + </parameter> + </syntax> + <description> + <para>Returns a true value if the indicated <replaceable>context</replaceable>, + <replaceable>extension</replaceable>, and <replaceable>priority</replaceable> exist.</para> + <warning><para>This function has been deprecated in favor of the <literal>DIALPLAN_EXISTS()</literal> function</para></warning> + </description> + </function> ***/ -static int isexten_function_read(struct ast_channel *chan, const char *cmd, char *data, - char *buf, size_t len) +static int isexten_function_read(struct ast_channel *chan, const char *cmd, char *data, + char *buf, size_t len) { char *parse; AST_DECLARE_APP_ARGS(args, @@ -102,7 +120,43 @@ static int isexten_function_read(struct ast_channel *chan, const char *cmd, char ast_log(LOG_ERROR, "Invalid arguments provided to DIALPLAN_EXISTS\n"); return -1; } - + + return 0; +} + +static int acf_isexten_exec(struct ast_channel *chan, const char *cmd, char *parse, char *buffer, size_t buflen) +{ + int priority_int; + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(context); + AST_APP_ARG(extension); + AST_APP_ARG(priority); + ); + + AST_STANDARD_APP_ARGS(args, parse); + + if (ast_strlen_zero(args.context)) { + args.context = chan->context; + } + + if (ast_strlen_zero(args.extension)) { + ast_log(LOG_WARNING, "Syntax: VALID_EXTEN([<context>],<extension>[,<priority>]) - missing argument <extension>!\n"); + return -1; + } + + if (ast_strlen_zero(args.priority)) { + priority_int = 1; + } else { + priority_int = atoi(args.priority); + } + + if (ast_exists_extension(chan, args.context, args.extension, priority_int, + S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) { + ast_copy_string(buffer, "1", buflen); + } else { + ast_copy_string(buffer, "0", buflen); + } + return 0; } @@ -112,14 +166,23 @@ static struct ast_custom_function isexten_function = { .read_max = 2, }; +static struct ast_custom_function acf_isexten = { + .name = "VALID_EXTEN", + .read = acf_isexten_exec, +}; + static int unload_module(void) { - return ast_custom_function_unregister(&isexten_function); + int res = ast_custom_function_unregister(&isexten_function); + res |= ast_custom_function_unregister(&acf_isexten); + return res; } static int load_module(void) { - return ast_custom_function_register(&isexten_function); + int res = ast_custom_function_register(&isexten_function); + res |= ast_custom_function_register(&acf_isexten); + return res; } AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialplan Context/Extension/Priority Checking Functions"); |