(closes issue #12846)
[asterisk-bristuff.git] / apps / app_db.c
blob0c8d0585b9e0ee6d3f1c081f18f4bbc2c32df428
1 /*
2 * Asterisk -- An open source telephony toolkit.
4 * Copyright (C) 1999 - 2005, Digium, Inc.
5 * Copyright (C) 2003, Jefferson Noxon
7 * Mark Spencer <markster@digium.com>
8 * Jefferson Noxon <jeff@debian.org>
10 * See http://www.asterisk.org for more information about
11 * the Asterisk project. Please do not directly contact
12 * any of the maintainers of this project for assistance;
13 * the project provides a web site, mailing lists and IRC
14 * channels for your use.
16 * This program is free software, distributed under the terms of
17 * the GNU General Public License Version 2. See the LICENSE file
18 * at the top of the source tree.
21 /*! \file
23 * \brief Database access functions
25 * \author Mark Spencer <markster@digium.com>
26 * \author Jefferson Noxon <jeff@debian.org>
28 * \ingroup applications
31 #include "asterisk.h"
33 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
35 #include <stdlib.h>
36 #include <stdio.h>
37 #include <string.h>
38 #include <unistd.h>
39 #include <sys/types.h>
41 #include "asterisk/options.h"
42 #include "asterisk/file.h"
43 #include "asterisk/logger.h"
44 #include "asterisk/channel.h"
45 #include "asterisk/pbx.h"
46 #include "asterisk/module.h"
47 #include "asterisk/astdb.h"
48 #include "asterisk/lock.h"
49 #include "asterisk/options.h"
51 /*! \todo XXX Remove this application after 1.4 is relased */
52 static char *d_descrip =
53 " DBdel(family/key): This application will delete a key from the Asterisk\n"
54 "database.\n"
55 " This application has been DEPRECATED in favor of the DB_DELETE function.\n";
57 static char *dt_descrip =
58 " DBdeltree(family[/keytree]): This application will delete a family or keytree\n"
59 "from the Asterisk database\n";
61 static char *d_app = "DBdel";
62 static char *dt_app = "DBdeltree";
64 static char *d_synopsis = "Delete a key from the database";
65 static char *dt_synopsis = "Delete a family or keytree from the database";
68 static int deltree_exec(struct ast_channel *chan, void *data)
70 char *argv, *family, *keytree;
71 struct ast_module_user *u;
73 u = ast_module_user_add(chan);
75 argv = ast_strdupa(data);
77 if (strchr(argv, '/')) {
78 family = strsep(&argv, "/");
79 keytree = strsep(&argv, "\0");
80 if (!family || !keytree) {
81 ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
82 ast_module_user_remove(u);
83 return 0;
85 if (ast_strlen_zero(keytree))
86 keytree = 0;
87 } else {
88 family = argv;
89 keytree = 0;
92 if (option_verbose > 2) {
93 if (keytree)
94 ast_verbose(VERBOSE_PREFIX_3 "DBdeltree: family=%s, keytree=%s\n", family, keytree);
95 else
96 ast_verbose(VERBOSE_PREFIX_3 "DBdeltree: family=%s\n", family);
99 if (ast_db_deltree(family, keytree)) {
100 if (option_verbose > 2)
101 ast_verbose(VERBOSE_PREFIX_3 "DBdeltree: Error deleting key from database.\n");
104 ast_module_user_remove(u);
106 return 0;
109 static int del_exec(struct ast_channel *chan, void *data)
111 char *argv, *family, *key;
112 struct ast_module_user *u;
113 static int deprecation_warning = 0;
115 u = ast_module_user_add(chan);
117 if (!deprecation_warning) {
118 deprecation_warning = 1;
119 ast_log(LOG_WARNING, "The DBdel application has been deprecated in favor of the DB_DELETE dialplan function!\n");
122 argv = ast_strdupa(data);
124 if (strchr(argv, '/')) {
125 family = strsep(&argv, "/");
126 key = strsep(&argv, "\0");
127 if (!family || !key) {
128 ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
129 ast_module_user_remove(u);
130 return 0;
132 if (option_verbose > 2)
133 ast_verbose(VERBOSE_PREFIX_3 "DBdel: family=%s, key=%s\n", family, key);
134 if (ast_db_del(family, key)) {
135 if (option_verbose > 2)
136 ast_verbose(VERBOSE_PREFIX_3 "DBdel: Error deleting key from database.\n");
138 } else {
139 ast_log(LOG_DEBUG, "Ignoring, no parameters\n");
142 ast_module_user_remove(u);
144 return 0;
147 static int unload_module(void)
149 int retval;
151 retval = ast_unregister_application(dt_app);
152 retval |= ast_unregister_application(d_app);
154 return retval;
157 static int load_module(void)
159 int retval;
161 retval = ast_register_application(d_app, del_exec, d_synopsis, d_descrip);
162 retval |= ast_register_application(dt_app, deltree_exec, dt_synopsis, dt_descrip);
164 return retval;
167 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Database Access Functions");