aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_zapateller.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2002-12-02 02:44:16 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2002-12-02 02:44:16 +0000
commitd765b29b0aab325770b41e9d6297ee7312dfcfe9 (patch)
treee22dabea48eb3ae36c663cd4d92fd7a9a4abe068 /apps/app_zapateller.c
parent909f17e6cac6b1b876169ade5755c1ef9fdc5efb (diff)
Version 0.3.0 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@559 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_zapateller.c')
-rwxr-xr-xapps/app_zapateller.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/apps/app_zapateller.c b/apps/app_zapateller.c
index c9e5fdc34..55de6bf31 100755
--- a/apps/app_zapateller.c
+++ b/apps/app_zapateller.c
@@ -31,8 +31,10 @@ static char *synopsis = "Block telemarketers with SIT";
static char *descrip =
" Zapateller(options): Generates special information tone to block telemarketers\n"
"from calling you. Returns 0 normally or -1 on hangup. Options is a pipe-delimited\n"
-"list of options. The only supported option is 'answer' which will cause the line to\n"
-"be answered before playing the tone";
+"list of options. The following options are available: 'answer' causes the line to\n"
+"be answered before playing the tone, 'nocallerid' causes Zapateller to only play\n"
+"the tone if there is no callerid information available. Options should be\n"
+"seperated by | characters.\n";
STANDARD_LOCAL_USER;
@@ -42,22 +44,44 @@ static int zapateller_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct localuser *u;
+ int answer = 0, nocallerid = 0;
+ char *c;
+ char *stringp=NULL;
LOCAL_USER_ADD(u);
+
+ stringp=data;
+ c = strsep(&stringp, "|");
+ while(c && strlen(c)) {
+ if (!strcasecmp(c, "answer"))
+ answer = 1;
+ else if (!strcasecmp(c, "nocallerid"))
+ nocallerid = 1;
+
+ c = strsep(&stringp, "|");
+ }
+
ast_stopstream(chan);
if (chan->_state != AST_STATE_UP) {
- if (data && !strcasecmp(data, "answer"))
+
+ if (answer)
res = ast_answer(chan);
if (!res) {
res = ast_safe_sleep(chan, 500);
}
}
+ if (chan->callerid && nocallerid) {
+ LOCAL_USER_REMOVE(u);
+ return res;
+ }
if (!res)
res = ast_tonepair(chan, 950, 0, 330, 0);
if (!res)
res = ast_tonepair(chan, 1400, 0, 330, 0);
if (!res)
res = ast_tonepair(chan, 1800, 0, 330, 0);
+ if (!res)
+ res = ast_tonepair(chan, 0, 0, 1000, 0);
LOCAL_USER_REMOVE(u);
return res;
}