From 8c52f5c1f51c865f426b63385184f9a47823b829 Mon Sep 17 00:00:00 2001 From: tilghman Date: Wed, 12 May 2010 16:29:14 +0000 Subject: Merged revisions 262656 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r262656 | tilghman | 2010-05-12 11:23:26 -0500 (Wed, 12 May 2010) | 8 lines Ensure the arguments are initialized. Also miscellaneous CG cleanup. (closes issue #16576) Reported by: uxbod Patches: 20100505__issue16576.diff.txt uploaded by tilghman (license 14) Tested by: uxbod ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@262659 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_privacy.c | 69 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/apps/app_privacy.c b/apps/app_privacy.c index 0780d279e..320b9f678 100644 --- a/apps/app_privacy.c +++ b/apps/app_privacy.c @@ -21,7 +21,7 @@ * \brief Block all calls without Caller*ID, require phone # to be entered * * \author Mark Spencer - * + * * \ingroup applications */ @@ -101,48 +101,55 @@ static int privacy_exec (struct ast_channel *chan, void *data) } else { /*Answer the channel if it is not already*/ if (chan->_state != AST_STATE_UP) { - if ((res = ast_answer(chan))) + if ((res = ast_answer(chan))) { return -1; + } } - if (!ast_strlen_zero(data)) { - parse = ast_strdupa(data); - - AST_STANDARD_APP_ARGS(args, parse); + parse = ast_strdupa(S_OR(data, "")); - if (args.maxretries) { - if (sscanf(args.maxretries, "%30d", &x) == 1) - maxretries = x; - else - ast_log(LOG_WARNING, "Invalid max retries argument\n"); + AST_STANDARD_APP_ARGS(args, parse); + + if (!ast_strlen_zero(args.maxretries)) { + if (sscanf(args.maxretries, "%30d", &x) == 1 && x > 0) { + maxretries = x; + } else { + ast_log(LOG_WARNING, "Invalid max retries argument: '%s'\n", args.maxretries); } - if (args.minlength) { - if (sscanf(args.minlength, "%30d", &x) == 1) - minlength = x; - else - ast_log(LOG_WARNING, "Invalid min length argument\n"); + } + if (!ast_strlen_zero(args.minlength)) { + if (sscanf(args.minlength, "%30d", &x) == 1 && x > 0) { + minlength = x; + } else { + ast_log(LOG_WARNING, "Invalid min length argument: '%s'\n", args.minlength); } - } + } /* Play unidentified call */ res = ast_safe_sleep(chan, 1000); - if (!res) + if (!res) { res = ast_streamfile(chan, "privacy-unident", chan->language); - if (!res) + } + if (!res) { res = ast_waitstream(chan, ""); + } /* Ask for 10 digit number, give 3 attempts */ for (retries = 0; retries < maxretries; retries++) { - if (!res) + if (!res) { res = ast_streamfile(chan, "privacy-prompt", chan->language); - if (!res) + } + if (!res) { res = ast_waitstream(chan, ""); + } - if (!res ) + if (!res) { res = ast_readstring(chan, phone, sizeof(phone) - 1, /* digit timeout ms */ 3200, /* first digit timeout */ 5000, "#"); + } - if (res < 0) + if (res < 0) { break; + } /* Make sure we get at least digits */ if (strlen(phone) >= minlength ) { @@ -161,25 +168,27 @@ static int privacy_exec (struct ast_channel *chan, void *data) } } else { res = ast_streamfile(chan, "privacy-incorrect", chan->language); - if (!res) + if (!res) { res = ast_waitstream(chan, ""); + } } } - + /* Got a number, play sounds and send them on their way */ - if ((retries < maxretries) && res >= 0 ) { + if ((retries < maxretries) && res >= 0) { res = ast_streamfile(chan, "privacy-thankyou", chan->language); - if (!res) + if (!res) { res = ast_waitstream(chan, ""); + } - ast_set_callerid (chan, phone, "Privacy Manager", NULL); + ast_set_callerid(chan, phone, "Privacy Manager", NULL); /* Clear the unavailable presence bit so if it came in on PRI * the caller id will now be passed out to other channels */ chan->cid.cid_pres &= (AST_PRES_UNAVAILABLE ^ 0xFF); - ast_verb(3, "Changed Caller*ID to %s, callerpres to %d\n",phone,chan->cid.cid_pres); + ast_verb(3, "Changed Caller*ID to '%s', callerpres to %d\n", phone, chan->cid.cid_pres); pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "SUCCESS"); } else { @@ -192,7 +201,7 @@ static int privacy_exec (struct ast_channel *chan, void *data) static int unload_module(void) { - return ast_unregister_application (app); + return ast_unregister_application(app); } static int load_module(void) -- cgit v1.2.3