git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6998 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Kevin P. Fleming 20 years ago
parent 8f536c775e
commit 5eceb92944

@ -1,5 +1,7 @@
2005-11-07 Kevin P. Fleming <kpfleming@digium.com> 2005-11-07 Kevin P. Fleming <kpfleming@digium.com>
* apps/app_privacy.c: upgrade to new arg/option API and implement priority jumping control
* apps/app_sendtext.c: upgrade to new arg/option API and implement priority jumping control * apps/app_sendtext.c: upgrade to new arg/option API and implement priority jumping control
* apps/app_transfer.c: upgrade to new arg/option API and implement priority jumping control * apps/app_transfer.c: upgrade to new arg/option API and implement priority jumping control

@ -53,17 +53,24 @@ 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: If no Caller*ID is sent, PrivacyManager answers the\n" " PrivacyManager([maxretries[|minlength[|options]]]): If no Caller*ID \n"
"channel and asks the caller to enter their phone number.\n" "is sent, PrivacyManager answers the channel and asks the caller to\n"
"The caller is given 3 attempts. If after 3 attempts, they do not enter\n" "enter their phone number. The caller is given 3 attempts to do so.\n"
"at least a 10 digit phone number, and if there exists a priority n + 101,\n" "The application does nothing if Caller*ID was received on the channel.\n"
"where 'n' is the priority of the current instance, then the\n"
"channel will be setup to continue at that priority level.\n"
"Otherwise, the call is hungup. Does nothing if Caller*ID was received on the\n"
"channel.\n"
" Configuration file privacy.conf contains two variables:\n" " Configuration file privacy.conf contains two variables:\n"
" maxretries default 3 -maximum number of attempts the caller is allowed to input a callerid.\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" " minlength default 10 -minimum allowable digits in the input callerid number.\n"
"If you don't want to use the config file and have an i/o operation with\n"
"every call, you can also specify maxretries and minlength as application\n"
"parameters. Doing so supercedes any values set in privacy.conf.\n"
"The option string may contain the following character: \n"
" 'j' -- jump to n+101 priority after <maxretries> failed attempts to collect\n"
" the minlength number of digits.\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"
" SUCCESS | FAILED \n"
; ;
STANDARD_LOCAL_USER; STANDARD_LOCAL_USER;
@ -78,11 +85,18 @@ static int privacy_exec (struct ast_channel *chan, void *data)
int retries; int retries;
int maxretries = 3; int maxretries = 3;
int minlength = 10; int minlength = 10;
int x; int x = 0;
char *s; char *s;
char phone[30]; char phone[30];
struct localuser *u; struct localuser *u;
struct ast_config *cfg; struct ast_config *cfg = NULL;
char *parse = NULL;
int priority_jump = 0;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(maxretries);
AST_APP_ARG(minlength);
AST_APP_ARG(options);
);
LOCAL_USER_ADD (u); LOCAL_USER_ADD (u);
if (!ast_strlen_zero(chan->cid.cid_num)) { if (!ast_strlen_zero(chan->cid.cid_num)) {
@ -97,32 +111,63 @@ static int privacy_exec (struct ast_channel *chan, void *data)
return -1; return -1;
} }
} }
/*Read in the config file*/
cfg = ast_config_load(PRIV_CONFIG);
if (!ast_strlen_zero((char *)data))
{
parse = ast_strdupa(data);
if (!parse) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
/*Play unidentified call*/ AST_STANDARD_APP_ARGS(args, parse);
res = ast_safe_sleep(chan, 1000);
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 (args.maxretries) {
if (sscanf(s, "%d", &x) == 1) { if (sscanf(args.maxretries, "%d", &x) == 1)
maxretries = x; maxretries = x;
} else { else
ast_log(LOG_WARNING, "Invalid max retries argument\n"); ast_log(LOG_WARNING, "Invalid max retries argument\n");
} }
if (args.minlength) {
if (sscanf(args.minlength, "%d", &x) == 1)
minlength = x;
else
ast_log(LOG_WARNING, "Invalid min length argument\n");
}
if (args.options)
if (strchr(args.options, 'j'))
priority_jump = 1;
}
if (!x)
{
/*Read in the config file*/
cfg = ast_config_load(PRIV_CONFIG);
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");
} }
if (cfg && (s = ast_variable_retrieve(cfg, "general", "minlength"))) { if (cfg && (s = ast_variable_retrieve(cfg, "general", "minlength"))) {
if (sscanf(s, "%d", &x) == 1) { if (sscanf(s, "%d", &x) == 1)
minlength = x; minlength = x;
} else { else
ast_log(LOG_WARNING, "Invalid min length argument\n"); ast_log(LOG_WARNING, "Invalid min length argument\n");
} }
} }
/*Play unidentified call*/
res = ast_safe_sleep(chan, 1000);
if (!res)
res = ast_streamfile(chan, "privacy-unident", chan->language);
if (!res)
res = ast_waitstream(chan, "");
/*Ask for 10 digit number, give 3 attempts*/ /*Ask for 10 digit number, give 3 attempts*/
for (retries = 0; retries < maxretries; retries++) { for (retries = 0; retries < maxretries; retries++) {
if (!res) if (!res)
@ -154,9 +199,11 @@ static int privacy_exec (struct ast_channel *chan, void *data)
ast_set_callerid (chan, phone, "Privacy Manager", NULL); ast_set_callerid (chan, phone, "Privacy Manager", NULL);
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "Changed Caller*ID to %s\n",phone); ast_verbose (VERBOSE_PREFIX_3 "Changed Caller*ID to %s\n",phone);
pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "SUCCESS");
} else { } else {
/* Send the call to n+101 priority, where n is the current priority */ if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101); ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "FAILED");
} }
if (cfg) if (cfg)
ast_config_destroy(cfg); ast_config_destroy(cfg);

Loading…
Cancel
Save