--- app_controlplayback.c.orig 2008-01-30 09:17:37.000000000 +0100 +++ app_controlplayback.c 2008-01-30 11:36:01.000000000 +0100 @@ -78,6 +78,17 @@ 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) != NULL) { + return -1; + } else { + return 0; + } +} + static int controlplayback_exec(struct ast_channel *chan, void *data) { int res = 0; @@ -114,10 +125,20 @@ 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)) { + if ( !is_argument(args.rev, '#') && !is_argument(args.stop, '#') && !is_argument(args.pause, '#') && !is_argument(args.restart, '#') ) { + args.fwd = "#"; + } else { + args.fwd = NULL; + } + } + if (!args.rev || !is_on_phonepad(*args.rev)) { + if ( !is_argument(args.fwd, '*') && !is_argument(args.stop, '*') && !is_argument(args.pause, '*') && !is_argument(args.restart, '*') ) { + args.rev = "*"; + } else { + args.rev = NULL; + } + } if (args.stop && !is_on_phonepad(*args.stop)) args.stop = NULL; if (args.pause && !is_on_phonepad(*args.pause))