aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_privacy.c
diff options
context:
space:
mode:
authormvanbaak <mvanbaak@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-08 11:40:44 +0000
committermvanbaak <mvanbaak@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-08 11:40:44 +0000
commit85f4dc1869921007a98833b566b2d11040f8f850 (patch)
tree6a25d3e6ec69fb17c0064ab6b08d72f6a84f0e64 /apps/app_privacy.c
parentd6ba625aacca59756289d2b2edbfbdea1ca48613 (diff)
add a new argument to PrivacyManager to specify a context
where the entered phone number is checked. You can now define a set of extensions/exten patterns that describe valid phone numbers. PrivacyManager will check that context for a match with the given phone number. This way you get better control. For example people blindly hitting 10 digits just to get past privacymanager Example line in extensions.conf: exten => incoming,n,PrivacyManager(3,10,,route-outgoing) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@121197 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_privacy.c')
-rw-r--r--apps/app_privacy.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/apps/app_privacy.c b/apps/app_privacy.c
index e8e0f4d1c..09f698861 100644
--- a/apps/app_privacy.c
+++ b/apps/app_privacy.c
@@ -46,13 +46,14 @@ static char *app = "PrivacyManager";
static char *synopsis = "Require phone number to be entered, if no CallerID sent";
static char *descrip =
- " PrivacyManager([maxretries][,minlength]): If no Caller*ID \n"
+ " PrivacyManager([maxretries][,minlength][,context]): If no Caller*ID \n"
"is sent, PrivacyManager answers the channel and asks the caller to\n"
"enter their phone number. The caller is given 'maxretries' attempts to do so.\n"
"The application does nothing if Caller*ID was received on the channel.\n"
" maxretries default 3 -maximum number of attempts the caller is allowed \n"
" to input a callerid.\n"
" minlength default 10 -minimum allowable digits in the input callerid number.\n"
+ " context context to check the given Caller*ID against patterns.\n"
"The application sets the following channel variable upon completion: \n"
"PRIVACYMGRSTATUS The status of the privacy manager's attempt to collect \n"
" a phone number from the user. A text string that is either:\n"
@@ -73,6 +74,7 @@ static int privacy_exec (struct ast_channel *chan, void *data)
AST_APP_ARG(maxretries);
AST_APP_ARG(minlength);
AST_APP_ARG(options);
+ AST_APP_ARG(checkcontext);
);
if (!ast_strlen_zero(chan->cid.cid_num)) {
@@ -101,7 +103,6 @@ static int privacy_exec (struct ast_channel *chan, void *data)
else
ast_log(LOG_WARNING, "Invalid min length argument\n");
}
-
}
/* Play unidentified call */
@@ -125,9 +126,21 @@ static int privacy_exec (struct ast_channel *chan, void *data)
break;
/* Make sure we get at least digits */
- if (strlen(phone) >= minlength )
- break;
- else {
+ if (strlen(phone) >= minlength ) {
+ /* if we have a checkcontext argument, do pattern matching */
+ if (!ast_strlen_zero(args.checkcontext)) {
+ if (!ast_exists_extension(NULL, args.checkcontext, phone, 1, NULL)) {
+ res = ast_streamfile(chan, "privacy-incorrect", chan->language);
+ if (!res) {
+ res = ast_waitstream(chan, "");
+ }
+ } else {
+ break;
+ }
+ } else {
+ break;
+ }
+ } else {
res = ast_streamfile(chan, "privacy-incorrect", chan->language);
if (!res)
res = ast_waitstream(chan, "");