Use find_user for existsmailbox
[asterisk/asterisk.git] / apps / app_setcidnum.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * App to set callerid
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  * Oliver Daudey <traveler@xs4all.nl>
10  *
11  * This program is free software, distributed under the terms of
12  * the GNU General Public License
13  */
14  
15 #include <asterisk/lock.h>
16 #include <asterisk/file.h>
17 #include <asterisk/logger.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/utils.h>
25 #include <string.h>
26 #include <stdlib.h>
27 #include <pthread.h>
28
29 static char *tdesc = "Set CallerID Number";
30
31 static char *app = "SetCIDNum";
32
33 static char *synopsis = "Set CallerID Number";
34
35 static char *descrip = 
36 "  SetCIDNum(cnum[|a]): Set Caller*ID Number on a call to a new\n"
37 "value, while preserving the original Caller*ID name.  This is\n"
38 "useful for providing additional information to the called\n"
39 "party. Sets ANI as well if a flag is used.  Always returns 0\n";
40
41 STANDARD_LOCAL_USER;
42
43 LOCAL_USER_DECL;
44
45 static int setcallerid_exec(struct ast_channel *chan, void *data)
46 {
47         int res = 0;
48         char tmp[256] = "";
49         char oldcid[256] = "", *l, *n;
50         char newcid[256] = "";
51         struct localuser *u;
52         char *opt;
53         int anitoo = 0;
54         if (data)
55                 strncpy(tmp, (char *)data, sizeof(tmp) - 1);
56         opt = strchr(tmp, '|');
57         if (opt) {
58                 *opt = '\0';
59                 opt++;
60                 if (*opt == 'a')
61                         anitoo = 1;
62         }
63         LOCAL_USER_ADD(u);
64         if (chan->callerid) {
65                 strncpy(oldcid, chan->callerid, sizeof(oldcid) - 1);
66                 ast_callerid_parse(oldcid, &n, &l);
67                 l = tmp;
68                 if (!ast_strlen_zero(l)) {
69                         if (n && !ast_strlen_zero(n))
70                                 snprintf(newcid, sizeof(newcid), "\"%s\" <%s>", n, l);
71                         else
72                                 strncpy(newcid, tmp, sizeof(newcid) - 1);
73                 } else if (n && !ast_strlen_zero(n)) {
74                         strncpy(newcid, n, sizeof(newcid) - 1);
75                 }
76         } else
77                 strncpy(newcid, tmp, sizeof(newcid));
78         ast_set_callerid(chan, !ast_strlen_zero(newcid) ? newcid : NULL, anitoo);
79         LOCAL_USER_REMOVE(u);
80         return res;
81 }
82
83 int unload_module(void)
84 {
85         STANDARD_HANGUP_LOCALUSERS;
86         return ast_unregister_application(app);
87 }
88
89 int load_module(void)
90 {
91         return ast_register_application(app, setcallerid_exec, synopsis, descrip);
92 }
93
94 char *description(void)
95 {
96         return tdesc;
97 }
98
99 int usecount(void)
100 {
101         int res;
102         STANDARD_USECOUNT(res);
103         return res;
104 }
105
106 char *key()
107 {
108         return ASTERISK_GPL_KEY;
109 }