Use find_user for existsmailbox
[asterisk/asterisk.git] / apps / app_lookupblacklist.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * App to lookup the callerid number, and see if it is blacklisted
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #include <asterisk/lock.h>
15 #include <asterisk/file.h>
16 #include <asterisk/logger.h>
17 #include <asterisk/options.h>
18 #include <asterisk/channel.h>
19 #include <asterisk/pbx.h>
20 #include <asterisk/module.h>
21 #include <asterisk/translate.h>
22 #include <asterisk/image.h>
23 #include <asterisk/callerid.h>
24 #include <asterisk/astdb.h>
25 #include <string.h>
26 #include <stdlib.h>
27 #include <pthread.h>
28
29 static char *tdesc = "Look up Caller*ID name/number from blacklist database";
30
31 static char *app = "LookupBlacklist";
32
33 static char *synopsis = "Look up Caller*ID name/number from blacklist database";
34
35 static char *descrip =
36   "  LookupBlacklist: Looks up the Caller*ID number on the active\n"
37   "channel in the Asterisk database (family 'blacklist').  If the\n"
38   "number is found, and if there exists a priority n + 101,\n"
39   "where 'n' is the priority of the current instance, then  the\n"
40   "channel  will  be  setup  to continue at that priority level.\n"
41   "Otherwise, it returns 0.  Does nothing if no Caller*ID was received on the\n"
42   "channel.\n"
43   "Example: database put blacklist <name/number> 1\n";
44
45 STANDARD_LOCAL_USER;
46
47 LOCAL_USER_DECL;
48
49 static int
50 lookupblacklist_exec (struct ast_channel *chan, void *data)
51 {
52         char old_cid[144] = "", *num, *name;
53         char blacklist[1];
54         char shrunknum[64] = "";
55         struct localuser *u;
56         int bl = 0;
57
58         LOCAL_USER_ADD (u);
59         if (chan->callerid)
60         {
61                 strncpy (old_cid, chan->callerid, sizeof (old_cid) - 1);
62                 ast_callerid_parse (old_cid, &name, &num);
63                 if (num)
64                         strncpy (shrunknum, num, sizeof (shrunknum) - 1);
65                 else
66                         num = shrunknum;
67                 
68                 ast_shrink_phone_number (shrunknum);
69                 if (!ast_db_get ("blacklist", shrunknum, blacklist, sizeof (blacklist)))
70                 {
71                         if (option_verbose > 2)
72                                 ast_log(LOG_NOTICE, "Blacklisted number %s found\n",shrunknum);
73                         bl = 1;
74                 }
75                 else if (!ast_db_get ("blacklist", name, blacklist, sizeof (blacklist)))
76                 {
77                         if (option_verbose > 2)
78                                 ast_log (LOG_NOTICE,"Blacklisted name \"%s\" found\n",name);
79                         bl = 1;
80                 }
81         }
82         
83         if (bl && ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid))
84                 chan->priority+=100;
85         LOCAL_USER_REMOVE (u);
86         return 0;
87 }
88
89 int unload_module (void)
90 {
91         STANDARD_HANGUP_LOCALUSERS;
92         return ast_unregister_application (app);
93 }
94
95 int load_module (void)
96 {
97         return ast_register_application (app, lookupblacklist_exec, synopsis,descrip);
98 }
99
100 char *description (void)
101 {
102         return tdesc;
103 }
104
105 int usecount (void)
106 {
107         int res;
108         STANDARD_USECOUNT (res);
109         return res;
110 }
111
112 char *key ()
113 {
114         return ASTERISK_GPL_KEY;
115 }