Issue 9477 - Improve menuselect labels
[asterisk/asterisk.git] / apps / app_channelredirect.c
index de8b6ab..075f8bb 100644 (file)
  * \ingroup applications
  */
 
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
 #include "asterisk/file.h"
 #include "asterisk/logger.h"
 #include "asterisk/channel.h"
@@ -40,20 +40,19 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/lock.h"
 #include "asterisk/app.h"
 #include "asterisk/features.h"
+#include "asterisk/options.h"
 
-static char *tdesc = "Channel Redirect";
 static char *app = "ChannelRedirect";
 static char *synopsis = "Redirects given channel to a dialplan target.";
 static char *descrip = 
 "ChannelRedirect(channel|[[context|]extension|]priority):\n"
 "  Sends the specified channel to the specified extension priority\n";
 
-LOCAL_USER_DECL;
 
 static int asyncgoto_exec(struct ast_channel *chan, void *data)
 {
        int res = -1;
-       struct localuser *u;
+       struct ast_module_user *u;
        char *info, *context, *exten, *priority;
        int prio = 1;
        struct ast_channel *chan2 = NULL;
@@ -68,7 +67,7 @@ static int asyncgoto_exec(struct ast_channel *chan, void *data)
                return -1;
        }
 
-       LOCAL_USER_ADD(u);
+       u = ast_module_user_add(chan);
 
        info = ast_strdupa(data);
        AST_STANDARD_APP_ARGS(args, info);
@@ -99,15 +98,17 @@ static int asyncgoto_exec(struct ast_channel *chan, void *data)
                context = NULL;
        }
 
-       if (!(prio = ast_findlabel_extension(chan2, S_OR(context, chan2->context), S_OR(exten, chan2->exten),
-                                            priority, chan2->cid.cid_num))) {
+       /* ast_findlabel_extension does not convert numeric priorities; it only does a lookup */
+       if (!(prio = atoi(priority)) && !(prio = ast_findlabel_extension(chan2, S_OR(context, chan2->context),
+                                                                       S_OR(exten, chan2->exten), priority, chan2->cid.cid_num))) {
                ast_log(LOG_WARNING, "'%s' is not a known priority or label\n", priority);
                goto chanquit;
        }
 
-       ast_log(LOG_DEBUG, "Attempting async goto (%s) to %s\n", args.channel, args.label);
+       if (option_debug > 1)
+               ast_log(LOG_DEBUG, "Attempting async goto (%s) to %s|%s|%d\n", args.channel, S_OR(context, chan2->context), S_OR(exten, chan2->exten), prio);
 
-       if (ast_async_goto_if_exists(chan2, context ? context : chan2->context, exten ? exten : chan2->exten, prio))
+       if (ast_async_goto_if_exists(chan2, S_OR(context, chan2->context), S_OR(exten, chan2->exten), prio))
                ast_log(LOG_WARNING, "%s failed for %s\n", app, args.channel);
        else
                res = 0;
@@ -115,42 +116,25 @@ static int asyncgoto_exec(struct ast_channel *chan, void *data)
  chanquit:
        ast_mutex_unlock(&chan2->lock);
  quit:
-       LOCAL_USER_REMOVE(u);
+       ast_module_user_remove(u);
 
        return res;
 }
 
-int unload_module(void)
+static int unload_module(void)
 {
        int res;
 
        res = ast_unregister_application(app);
 
-       STANDARD_HANGUP_LOCALUSERS;
+       ast_module_user_hangup_all();
 
        return res;     
 }
 
-int load_module(void)
+static int load_module(void)
 {
        return ast_register_application(app, asyncgoto_exec, synopsis, descrip);
 }
 
-char *description(void)
-{
-       return tdesc;
-}
-
-int usecount(void)
-{
-       int res;
-
-       STANDARD_USECOUNT(res);
-
-       return res;
-}
-
-char *key()
-{
-       return ASTERISK_GPL_KEY;
-}
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Redirects a given channel to a dialplan target");