Use argument macro in app_voicemail #6221

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
BJ Weschke 20 years ago
parent 5f542e14cc
commit 0c41704c68

@ -5039,15 +5039,24 @@ static int vm_execmain(struct ast_channel *chan, void *data)
ast_answer(chan);
if (!ast_strlen_zero(data)) {
char *tmp;
int argc;
char *argv[2];
char *opts[OPT_ARG_ARRAY_SIZE];
char *parse;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(argv0);
AST_APP_ARG(argv1);
);
parse = ast_strdupa(data);
if (!parse) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
tmp = ast_strdupa(data);
argc = ast_app_separate_args(tmp, '|', argv, sizeof(argv) / sizeof(argv[0]));
if (argc == 2) {
if (ast_app_parse_options(vm_app_options, &flags, opts, argv[1])) {
AST_STANDARD_APP_ARGS(args, parse);
if (args.argc == 2) {
if (ast_app_parse_options(vm_app_options, &flags, opts, args.argv1)) {
LOCAL_USER_REMOVE(u);
return -1;
}
@ -5077,28 +5086,27 @@ static int vm_execmain(struct ast_channel *chan, void *data)
}
} else {
/* old style options parsing */
while (*argv[0]) {
if (*argv[0] == 's') {
while (*(args.argv0)) {
if (*(args.argv0) == 's')
ast_set_flag(&flags, OPT_SILENT);
argv[0]++;
} else if (*argv[0] == 'p') {
else if (*(args.argv0) == 'p')
ast_set_flag(&flags, OPT_PREPEND_MAILBOX);
argv[0]++;
} else
else
break;
(args.argv0)++;
}
}
valid = ast_test_flag(&flags, OPT_SILENT);
if ((context = strchr(argv[0], '@')))
if ((context = strchr(args.argv0, '@')))
*context++ = '\0';
if (ast_test_flag(&flags, OPT_PREPEND_MAILBOX))
ast_copy_string(prefixstr, argv[0], sizeof(prefixstr));
ast_copy_string(prefixstr, args.argv0, sizeof(prefixstr));
else
ast_copy_string(vms.username, argv[0], sizeof(vms.username));
ast_copy_string(vms.username, args.argv0, sizeof(vms.username));
if (!ast_strlen_zero(vms.username) && (vmu = find_user(&vmus, context ,vms.username)))
skipuser++;
@ -5488,11 +5496,13 @@ static int vm_exec(struct ast_channel *chan, void *data)
struct localuser *u;
char tmp[256];
struct leave_vm_options leave_options;
int argc;
char *argv[2];
struct ast_flags flags = { 0 };
char *opts[OPT_ARG_ARRAY_SIZE];
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(argv0);
AST_APP_ARG(argv1);
);
LOCAL_USER_ADD(u);
memset(&leave_options, 0, sizeof(leave_options));
@ -5502,9 +5512,9 @@ static int vm_exec(struct ast_channel *chan, void *data)
if (!ast_strlen_zero(data)) {
ast_copy_string(tmp, data, sizeof(tmp));
argc = ast_app_separate_args(tmp, '|', argv, sizeof(argv) / sizeof(argv[0]));
if (argc == 2) {
if (ast_app_parse_options(vm_app_options, &flags, opts, argv[1])) {
AST_STANDARD_APP_ARGS(args, tmp);
if (args.argc == 2) {
if (ast_app_parse_options(vm_app_options, &flags, opts, args.argv1)) {
LOCAL_USER_REMOVE(u);
return -1;
}
@ -5522,21 +5532,18 @@ static int vm_exec(struct ast_channel *chan, void *data)
}
} else {
/* old style options parsing */
while (*argv[0]) {
if (*argv[0] == 's') {
while (*(args.argv0)) {
if (*(args.argv0) == 's')
ast_set_flag(&leave_options, OPT_SILENT);
argv[0]++;
} else if (*argv[0] == 'b') {
else if (*(args.argv0) == 'b')
ast_set_flag(&leave_options, OPT_BUSY_GREETING);
argv[0]++;
} else if (*argv[0] == 'u') {
else if (*(args.argv0) == 'u')
ast_set_flag(&leave_options, OPT_UNAVAIL_GREETING);
argv[0]++;
} else if (*argv[0] == 'j') {
else if (*(args.argv0) == 'j')
ast_set_flag(&leave_options, OPT_PRIORITY_JUMP);
argv[0]++;
} else
else
break;
(args.argv0)++;
}
}
} else {
@ -5549,10 +5556,10 @@ static int vm_exec(struct ast_channel *chan, void *data)
LOCAL_USER_REMOVE(u);
return 0;
}
argv[0] = ast_strdupa(tmp);
args.argv0 = ast_strdupa(tmp);
}
res = leave_voicemail(chan, argv[0], &leave_options);
res = leave_voicemail(chan, args.argv0, &leave_options);
if (res == ERROR_LOCK_PATH) {
ast_log(LOG_ERROR, "Could not leave voicemail. The path is already locked.\n");

Loading…
Cancel
Save