From a36ec02c7b7dcaa403d4bce75d5b62dfe00237d4 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Mon, 2 Dec 2002 02:44:16 +0000 Subject: [PATCH] Version 0.3.0 from FTP git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@559 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_zapateller.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/apps/app_zapateller.c b/apps/app_zapateller.c index c9e5fdc349..55de6bf31b 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; } -- GitLab