Skip to content
Snippets Groups Projects
Commit c5ea45af authored by Michiel van Baak's avatar Michiel van Baak
Browse files

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: https://origsvn.digium.com/svn/asterisk/trunk@121197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 33b3d38a
No related branches found
No related tags found
No related merge requests found
...@@ -79,6 +79,9 @@ Application Changes ...@@ -79,6 +79,9 @@ Application Changes
complete documentation. complete documentation.
* ChanIsAvail has a new option, 'a', which will return all available channels instead * 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. 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 SIP Changes
----------- -----------
......
...@@ -46,13 +46,14 @@ static char *app = "PrivacyManager"; ...@@ -46,13 +46,14 @@ static char *app = "PrivacyManager";
static char *synopsis = "Require phone number to be entered, if no CallerID sent"; static char *synopsis = "Require phone number to be entered, if no CallerID sent";
static char *descrip = 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" "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" "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" "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" " maxretries default 3 -maximum number of attempts the caller is allowed \n"
" to input a callerid.\n" " to input a callerid.\n"
" minlength default 10 -minimum allowable digits in the input callerid number.\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" "The application sets the following channel variable upon completion: \n"
"PRIVACYMGRSTATUS The status of the privacy manager's attempt to collect \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" " 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) ...@@ -73,6 +74,7 @@ static int privacy_exec (struct ast_channel *chan, void *data)
AST_APP_ARG(maxretries); AST_APP_ARG(maxretries);
AST_APP_ARG(minlength); AST_APP_ARG(minlength);
AST_APP_ARG(options); AST_APP_ARG(options);
AST_APP_ARG(checkcontext);
); );
if (!ast_strlen_zero(chan->cid.cid_num)) { if (!ast_strlen_zero(chan->cid.cid_num)) {
...@@ -101,7 +103,6 @@ static int privacy_exec (struct ast_channel *chan, void *data) ...@@ -101,7 +103,6 @@ static int privacy_exec (struct ast_channel *chan, void *data)
else else
ast_log(LOG_WARNING, "Invalid min length argument\n"); ast_log(LOG_WARNING, "Invalid min length argument\n");
} }
} }
/* Play unidentified call */ /* Play unidentified call */
...@@ -125,9 +126,21 @@ static int privacy_exec (struct ast_channel *chan, void *data) ...@@ -125,9 +126,21 @@ static int privacy_exec (struct ast_channel *chan, void *data)
break; break;
/* Make sure we get at least digits */ /* Make sure we get at least digits */
if (strlen(phone) >= minlength ) if (strlen(phone) >= minlength ) {
break; /* if we have a checkcontext argument, do pattern matching */
else { 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); res = ast_streamfile(chan, "privacy-incorrect", chan->language);
if (!res) if (!res)
res = ast_waitstream(chan, ""); res = ast_waitstream(chan, "");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment