From c6635ef6c2076dd5f33d42bfb113d4f4b33f493c Mon Sep 17 00:00:00 2001 From: Jason Parker Date: Wed, 30 Jan 2008 19:03:16 +0000 Subject: Allow disabling the default ffwd/rewind keys in the ControlPlayback application. This is done in a backward compat way. If the "default" key for ffwd/rew is used for another option (such as stop), the "default" is removed. (closes issue #11754) Reported by: johan Patches: app_controlplayback.c.option3.patch uploaded by johan (license 334) Tested by: johan, qwell git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@101296 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_controlplayback.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'apps/app_controlplayback.c') diff --git a/apps/app_controlplayback.c b/apps/app_controlplayback.c index b6dfd898e..85bcf7b92 100644 --- a/apps/app_controlplayback.c +++ b/apps/app_controlplayback.c @@ -78,6 +78,17 @@ static int is_on_phonepad(char key) return key == 35 || key == 42 || (key >= 48 && key <= 57); } +static int is_argument(const char *haystack, int needle) +{ + if (ast_strlen_zero(haystack)) + return 0; + + if (strchr(haystack, needle)) + return -1; + + return 0; +} + static int controlplayback_exec(struct ast_channel *chan, void *data) { int res = 0; @@ -114,10 +125,21 @@ static int controlplayback_exec(struct ast_channel *chan, void *data) skipms = args.skip ? (atoi(args.skip) ? atoi(args.skip) : 3000) : 3000; - if (!args.fwd || !is_on_phonepad(*args.fwd)) - args.fwd = "#"; - if (!args.rev || !is_on_phonepad(*args.rev)) - args.rev = "*"; + if (!args.fwd || !is_on_phonepad(*args.fwd)) { + char *digit = "#"; + if (!is_argument(args.rev, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit)) + args.fwd = digit; + else + args.fwd = NULL; + } + if (!args.rev || !is_on_phonepad(*args.rev)) { + char *digit = "*"; + if (!is_argument(args.fwd, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit)) + args.rev = digit; + else + args.rev = NULL; + } + ast_log(LOG_WARNING, "args.fwd = %s, args.rew = %s\n", args.fwd, args.rev); if (args.stop && !is_on_phonepad(*args.stop)) args.stop = NULL; if (args.pause && !is_on_phonepad(*args.pause)) -- cgit v1.2.3