more ast_copy_string conversions
[asterisk/asterisk.git] / apps / app_txtcidname.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Caller*id name lookup - Look up the caller's name via DNS
5  * 
6  * Copyright (C) 1999 - 2005, Digium, Inc.
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 <stdlib.h>
15 #include <unistd.h>
16 #include <string.h>
17 #include <stdlib.h>
18 #include <ctype.h>
19
20 #include "asterisk.h"
21
22 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
23
24 #include "asterisk/lock.h"
25 #include "asterisk/file.h"
26 #include "asterisk/logger.h"
27 #include "asterisk/channel.h"
28 #include "asterisk/pbx.h"
29 #include "asterisk/options.h"
30 #include "asterisk/config.h"
31 #include "asterisk/module.h"
32 #include "asterisk/enum.h"
33 #include "asterisk/utils.h"
34
35 static char *tdesc = "TXTCIDName";
36
37 static char *app = "TXTCIDName";
38
39 static char *synopsis = "Lookup caller name from TXT record";
40
41 static char *descrip = 
42 "  TXTCIDName(<CallerIDNumber>):  Looks up a Caller Name via DNS and sets\n"
43 "the variable 'TXTCIDNAME'. TXTCIDName will either be blank\n"
44 "or return the value found in the TXT record in DNS.\n" ;
45
46 #define ENUM_CONFIG "enum.conf"
47
48 static char h323driver[80] = "";
49 #define H323DRIVERDEFAULT "H323"
50
51 STANDARD_LOCAL_USER;
52
53 LOCAL_USER_DECL;
54
55 static int txtcidname_exec(struct ast_channel *chan, void *data)
56 {
57         int res=0;
58         char tech[80];
59         char txt[256] = "";
60         char dest[80];
61
62         struct localuser *u;
63         if (!data || !strlen(data)) {
64                 ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension)\n");
65                 res = 1;
66         }
67         LOCAL_USER_ADD(u);
68         if (!res) {
69                 res = ast_get_txt(chan, data, dest, sizeof(dest), tech, sizeof(tech), txt, sizeof(txt));
70         }
71         LOCAL_USER_REMOVE(u);
72         /* Parse it out */
73         if (res > 0) {
74                 if (!ast_strlen_zero(txt)) {
75                         pbx_builtin_setvar_helper(chan, "TXTCIDNAME", txt);
76 #if 0
77                         ast_log(LOG_DEBUG, "TXTCIDNAME got '%s'\n", txt);
78 #endif
79                 }
80         }
81         if (!res) {
82                 /* Look for a "busy" place */
83                 if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num))
84                         chan->priority += 100;
85         } else if (res > 0)
86                 res = 0;
87         return res;
88 }
89
90 static int load_config(void)
91 {
92         struct ast_config *cfg;
93         char *s;
94
95         cfg = ast_config_load(ENUM_CONFIG);
96         if (cfg) {
97                 if (!(s=ast_variable_retrieve(cfg, "general", "h323driver"))) {
98                         ast_copy_string(h323driver, H323DRIVERDEFAULT, sizeof(h323driver));
99                 } else {
100                         ast_copy_string(h323driver, s, sizeof(h323driver));
101                 }
102                 ast_config_destroy(cfg);
103                 return 0;
104         }
105         ast_log(LOG_NOTICE, "No ENUM Config file, using defaults\n");
106         return 0;
107 }
108
109
110 int unload_module(void)
111 {
112         STANDARD_HANGUP_LOCALUSERS;
113         return ast_unregister_application(app);
114 }
115
116 int load_module(void)
117 {
118         int res;
119         res = ast_register_application(app, txtcidname_exec, synopsis, descrip);
120         if (res)
121                 return(res);
122         if ((res=load_config())) {
123                 return(res);
124         }
125         return(0);
126 }
127
128 int reload(void)
129 {
130         return(load_config());
131 }
132
133
134 char *description(void)
135 {
136         return tdesc;
137 }
138
139 int usecount(void)
140 {
141         int res;
142         STANDARD_USECOUNT(res);
143         return res;
144 }
145
146 char *key()
147 {
148         return ASTERISK_GPL_KEY;
149 }
150