cb88c7e12ba971d508996583c1d1a44158a68b94
[asterisk/asterisk.git] / apps / app_txtcidname.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 /*
20  *
21  * Caller*id name lookup - Look up the caller's name via DNS
22  * 
23  */
24
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <string.h>
28 #include <stdlib.h>
29 #include <ctype.h>
30
31 #include "asterisk.h"
32
33 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
34
35 #include "asterisk/logger.h"
36 #include "asterisk/channel.h"
37 #include "asterisk/pbx.h"
38 #include "asterisk/options.h"
39 #include "asterisk/module.h"
40 #include "asterisk/enum.h"
41 #include "asterisk/utils.h"
42
43 static char *tdesc = "TXTCIDName";
44
45 static char *app = "TXTCIDName";
46
47 static char *synopsis = "Lookup caller name from TXT record";
48
49 static char *descrip = 
50 "  TXTCIDName(<CallerIDNumber>):  Looks up a Caller Name via DNS and sets\n"
51 "the variable 'TXTCIDNAME'. TXTCIDName will either be blank\n"
52 "or return the value found in the TXT record in DNS.\n" ;
53
54 STANDARD_LOCAL_USER;
55
56 LOCAL_USER_DECL;
57
58 static int txtcidname_exec(struct ast_channel *chan, void *data)
59 {
60         int res=0;
61         char tech[80];
62         char txt[256] = "";
63         char dest[80];
64
65         struct localuser *u;
66         if (!data || !strlen(data)) {
67                 ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension)\n");
68                 res = 1;
69         }
70         LOCAL_USER_ADD(u);
71         if (!res) {
72                 res = ast_get_txt(chan, data, dest, sizeof(dest), tech, sizeof(tech), txt, sizeof(txt));
73         }
74         LOCAL_USER_REMOVE(u);
75         /* Parse it out */
76         if (res > 0) {
77                 if (!ast_strlen_zero(txt)) {
78                         pbx_builtin_setvar_helper(chan, "TXTCIDNAME", txt);
79                         if (option_debug > 1)
80                                 ast_log(LOG_DEBUG, "TXTCIDNAME got '%s'\n", txt);
81                 }
82         }
83         if (!res) {
84                 /* Look for a "busy" place */
85                 ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
86         } else if (res > 0)
87                 res = 0;
88         return res;
89 }
90
91 int unload_module(void)
92 {
93         STANDARD_HANGUP_LOCALUSERS;
94         return ast_unregister_application(app);
95 }
96
97 int load_module(void)
98 {
99         int res;
100         
101         res = ast_register_application(app, txtcidname_exec, synopsis, descrip);
102         
103         return res;
104 }
105
106 char *description(void)
107 {
108         return tdesc;
109 }
110
111 int usecount(void)
112 {
113         int res;
114         STANDARD_USECOUNT(res);
115         return res;
116 }
117
118 char *key()
119 {
120         return ASTERISK_GPL_KEY;
121 }