rename SetVar application to Set, deprecate SetVar
[asterisk/asterisk.git] / apps / app_setrdnis.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * App to set rdnis
5  * 
6  * Copyright (C) 1999 - 2005, Digium, Inc.
7  *
8  * Mark Spencer <markster@digium.com>
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
28 static char *tdesc = "Set RDNIS Number";
29
30 static char *app = "SetRDNIS";
31
32 static char *synopsis = "Set RDNIS Number";
33
34 static char *descrip = 
35 "  SetRDNIS(cnum): Set RDNIS Number on a call to a new\n"
36 "value.  Always returns 0\n"
37 "SetRDNIS has been deprecated in favor of the function\n"
38 "CALLERID(rdnis)\n";
39
40 STANDARD_LOCAL_USER;
41
42 LOCAL_USER_DECL;
43
44 static int setrdnis_exec(struct ast_channel *chan, void *data)
45 {
46         struct localuser *u;
47         char *opt, *n, *l;
48         char tmp[256];
49         static int deprecation_warning = 0;
50
51         if (!deprecation_warning) {
52                 ast_log(LOG_WARNING, "SetRDNIS is deprecated, please use Set(CALLERID(rdnis)=value) instead.\n");
53                 deprecation_warning = 1;
54         }
55
56         if (data)
57                 strncpy(tmp, (char *)data, sizeof(tmp) - 1);
58         else
59                 tmp[0] = '\0';
60         opt = strchr(tmp, '|');
61         if (opt)
62                 *opt = '\0';
63         LOCAL_USER_ADD(u);
64         n = l = NULL;
65         ast_callerid_parse(tmp, &n, &l);
66         if (l) {
67                 ast_shrink_phone_number(l);
68                 ast_mutex_lock(&chan->lock);
69                 if (chan->cid.cid_rdnis)
70                         free(chan->cid.cid_rdnis);
71                 chan->cid.cid_rdnis = (l[0]) ? strdup(l) : NULL;
72                 ast_mutex_unlock(&chan->lock);
73         }
74         LOCAL_USER_REMOVE(u);
75         return 0;
76 }
77
78 int unload_module(void)
79 {
80         STANDARD_HANGUP_LOCALUSERS;
81         return ast_unregister_application(app);
82 }
83
84 int load_module(void)
85 {
86         return ast_register_application(app, setrdnis_exec, synopsis, descrip);
87 }
88
89 char *description(void)
90 {
91         return tdesc;
92 }
93
94 int usecount(void)
95 {
96         int res;
97         STANDARD_USECOUNT(res);
98         return res;
99 }
100
101 char *key()
102 {
103         return ASTERISK_GPL_KEY;
104 }