diff --git a/apps/app_privacy.c b/apps/app_privacy.c index 91194a11049cf38e3f94fc574ddbbf26e21be01f..9b5e0c9d6f1a8786215ac180cac558282bd96631 100755 --- a/apps/app_privacy.c +++ b/apps/app_privacy.c @@ -22,10 +22,13 @@ #include <asterisk/image.h> #include <asterisk/callerid.h> #include <asterisk/app.h> +#include <asterisk/config.h> #include <string.h> #include <stdlib.h> #include <pthread.h> +#define PRIV_CONFIG "privacy.conf" + static char *tdesc = "Require phone number to be entered, if no CallerID sent"; static char *app = "PrivacyManager"; @@ -51,9 +54,13 @@ privacy_exec (struct ast_channel *chan, void *data) { int res=0; int retries; + int maxretries = 3; + int x; + char *s; char phone[10]; char new_cid[144]; struct localuser *u; + struct ast_config *cfg; LOCAL_USER_ADD (u); if (chan->callerid) @@ -71,17 +78,29 @@ privacy_exec (struct ast_channel *chan, void *data) return -1; } } - /*Just a quick sleep*/ - sleep(1); + /*Read in the config file*/ + cfg = ast_load(PRIV_CONFIG); + /*Play unidentified call*/ - res = ast_streamfile(chan, "privacy-unident", chan->language); + res = ast_safe_sleep(1); + if (!res) + res = ast_streamfile(chan, "privacy-unident", chan->language); if (!res) res = ast_waitstream(chan, ""); + if (cfg && (s = ast_variable_retrieve(cfg, "general", "maxretries"))) { + if (sscanf(s, "%d", &x) == 1) { + maxretries = x; + } else { + ast_log(LOG_WARNING, "Invalid max retries argument\n"); + } + } + /*Ask for 10 digit number, give 3 attempts*/ - for (retries = 0; retries < 3; retries++) { - res = ast_app_getdata(chan, "privacy-prompt", phone, sizeof(phone), 0); + for (retries = 0; retries < maxretries; retries++) { + if (!res) + res = ast_app_getdata(chan, "privacy-prompt", phone, sizeof(phone), 0); if (res < 0) break; @@ -96,7 +115,7 @@ privacy_exec (struct ast_channel *chan, void *data) } /*Got a number, play sounds and send them on their way*/ - if ((retries < 3) && !res) { + if ((retries < maxretries) && !res) { res = ast_streamfile(chan, "privacy-thankyou", chan->language); if (!res) res = ast_waitstream(chan, ""); @@ -109,6 +128,8 @@ privacy_exec (struct ast_channel *chan, void *data) if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid)) chan->priority+=100; } + if (cfg) + ast_destroy(cfg); } LOCAL_USER_REMOVE (u); diff --git a/configs/privacy.conf.sample b/configs/privacy.conf.sample new file mode 100755 index 0000000000000000000000000000000000000000..0236bccb78c0a36caaa1288b5befbb71cad6626f --- /dev/null +++ b/configs/privacy.conf.sample @@ -0,0 +1,3 @@ +[general] + +maxretries = 2 ;How many chances the caller has to enter their number