aafa81336f44628192af02771a05990ba5bd4d4f
[asterisk/asterisk.git] / apps / app_lookupblacklist.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 App to lookup the callerid number, and see if it is blacklisted
22  *
23  * \ingroup applications
24  * 
25  */
26
27 #include <string.h>
28 #include <stdlib.h>
29
30 #include "asterisk.h"
31
32 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
33
34 #include "asterisk/lock.h"
35 #include "asterisk/file.h"
36 #include "asterisk/logger.h"
37 #include "asterisk/options.h"
38 #include "asterisk/channel.h"
39 #include "asterisk/pbx.h"
40 #include "asterisk/module.h"
41 #include "asterisk/translate.h"
42 #include "asterisk/image.h"
43 #include "asterisk/callerid.h"
44 #include "asterisk/astdb.h"
45
46 static char *tdesc = "Look up Caller*ID name/number from blacklist database";
47
48 static char *app = "LookupBlacklist";
49
50 static char *synopsis = "Look up Caller*ID name/number from blacklist database";
51
52 static char *descrip =
53   "  LookupBlacklist: Looks up the Caller*ID number on the active\n"
54   "channel in the Asterisk database (family 'blacklist').  If the\n"
55   "number is found, and if there exists a priority n + 101,\n"
56   "where 'n' is the priority of the current instance, then  the\n"
57   "channel  will  be  setup  to continue at that priority level.\n"
58   "Otherwise, it returns 0.  Does nothing if no Caller*ID was received on the\n"
59   "channel.\n"
60   "Example: database put blacklist <name/number> 1\n";
61
62 STANDARD_LOCAL_USER;
63
64 LOCAL_USER_DECL;
65
66 static int
67 lookupblacklist_exec (struct ast_channel *chan, void *data)
68 {
69         char blacklist[1];
70         struct localuser *u;
71         int bl = 0;
72
73         LOCAL_USER_ADD (u);
74         if (chan->cid.cid_num)
75         {
76                 if (!ast_db_get ("blacklist", chan->cid.cid_num, blacklist, sizeof (blacklist)))
77                 {
78                         if (option_verbose > 2)
79                                 ast_log(LOG_NOTICE, "Blacklisted number %s found\n",chan->cid.cid_num);
80                         bl = 1;
81                 }
82         }
83         if (chan->cid.cid_name) {
84                 if (!ast_db_get ("blacklist", chan->cid.cid_name, blacklist, sizeof (blacklist))) 
85                 {
86                         if (option_verbose > 2)
87                                 ast_log (LOG_NOTICE,"Blacklisted name \"%s\" found\n",chan->cid.cid_name);
88                         bl = 1;
89                 }
90         }
91         
92         if (bl)
93                 ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
94
95         LOCAL_USER_REMOVE (u);
96         return 0;
97 }
98
99 int unload_module (void)
100 {
101         int res;
102
103         res = ast_unregister_application(app);
104
105         STANDARD_HANGUP_LOCALUSERS;
106
107         return res;     
108 }
109
110 int load_module (void)
111 {
112         return ast_register_application (app, lookupblacklist_exec, synopsis,descrip);
113 }
114
115 char *description (void)
116 {
117         return tdesc;
118 }
119
120 int usecount (void)
121 {
122         int res;
123         STANDARD_USECOUNT (res);
124         return res;
125 }
126
127 char *key ()
128 {
129         return ASTERISK_GPL_KEY;
130 }