include "logger.h" and errno.h from asterisk.h - usage shows that they
[asterisk/asterisk.git] / apps / app_zapateller.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief Playback the special information tone to get rid of telemarketers
22  *
23  * \author Mark Spencer <markster@digium.com>
24  * 
25  * \ingroup applications
26  */
27  
28 #include "asterisk.h"
29
30 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
31
32 #include "asterisk/lock.h"
33 #include "asterisk/file.h"
34 #include "asterisk/channel.h"
35 #include "asterisk/pbx.h"
36 #include "asterisk/module.h"
37 #include "asterisk/translate.h"
38 #include "asterisk/app.h"
39
40 static char *app = "Zapateller";
41
42 static char *synopsis = "Block telemarketers with SIT";
43
44 static char *descrip = 
45 "  Zapateller(options):  Generates special information tone to block\n"
46 "telemarketers from calling you.  Options is a pipe-delimited list of\n" 
47 "options.  The following options are available:\n"
48 "    'answer'     - causes the line to be answered before playing the tone,\n" 
49 "    'nocallerid' - causes Zapateller to only play the tone if there is no\n"
50 "                   callerid information available.  Options should be\n"
51 "                   separated by , characters\n\n"
52 "  This application will set the following channel variable upon completion:\n"
53 "    ZAPATELLERSTATUS - This will contain the last action accomplished by the\n"
54 "                        Zapateller application. Possible values include:\n"
55 "                        NOTHING | ANSWERED | ZAPPED\n\n";
56
57
58 static int zapateller_exec(struct ast_channel *chan, void *data)
59 {
60         int res = 0;
61         int i, answer = 0, nocallerid = 0;
62         char *parse = ast_strdupa((char *)data);
63         AST_DECLARE_APP_ARGS(args,
64                 AST_APP_ARG(options)[2];
65         );
66
67         AST_STANDARD_APP_ARGS(args, parse);
68
69         for (i = 0; i < args.argc; i++) {
70                 if (!strcasecmp(args.options[i], "answer"))
71                         answer = 1;
72                 else if (!strcasecmp(args.options[i], "nocallerid"))
73                         nocallerid = 1;
74         }
75
76         pbx_builtin_setvar_helper(chan, "ZAPATELLERSTATUS", "NOTHING");
77         ast_stopstream(chan);
78         if (chan->_state != AST_STATE_UP) {
79                 if (answer) {
80                         res = ast_answer(chan);
81                         pbx_builtin_setvar_helper(chan, "ZAPATELLERSTATUS", "ANSWERED");
82                 }
83                 if (!res)
84                         res = ast_safe_sleep(chan, 500);
85         }
86
87         if (!ast_strlen_zero(chan->cid.cid_num) && nocallerid)
88                 return res;
89
90         if (!res) 
91                 res = ast_tonepair(chan, 950, 0, 330, 0);
92         if (!res) 
93                 res = ast_tonepair(chan, 1400, 0, 330, 0);
94         if (!res) 
95                 res = ast_tonepair(chan, 1800, 0, 330, 0);
96         if (!res) 
97                 res = ast_tonepair(chan, 0, 0, 1000, 0);
98         
99         pbx_builtin_setvar_helper(chan, "ZAPATELLERSTATUS", "ZAPPED");
100         return res;
101 }
102
103 static int unload_module(void)
104 {
105         return ast_unregister_application(app);
106 }
107
108 static int load_module(void)
109 {
110         return ast_register_application(app, zapateller_exec, synopsis, descrip);
111 }
112
113 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Block Telemarketers with Special Information Tone");