From 85f4dc1869921007a98833b566b2d11040f8f850 Mon Sep 17 00:00:00 2001 From: mvanbaak Date: Sun, 8 Jun 2008 11:40:44 +0000 Subject: 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 --- CHANGES | 3 +++ apps/app_privacy.c | 23 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 5570ba938..7352c64d3 100644 --- a/CHANGES +++ b/CHANGES @@ -79,6 +79,9 @@ Application Changes complete documentation. * ChanIsAvail has a new option, 'a', which will return all available channels instead of just the first one if you give the function more then one channel to check. + * PrivacyManager now takes an option where you can specify a context where the + given number will be matched. This way you have more control over who is allowed + and it stops the people who blindly enter 10 digits. SIP Changes ----------- 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, ""); -- cgit v1.2.3