[Asterisk-cvs] asterisk db.c,1.11,1.12

markster at lists.digium.com markster at lists.digium.com
Sat Jan 29 17:31:38 CST 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv26915

Modified Files:
	db.c 
Log Message:
Add DBGet/DBPut (bug #3455)


Index: db.c
===================================================================
RCS file: /usr/cvsroot/asterisk/db.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- db.c	22 Dec 2004 01:07:02 -0000	1.11
+++ db.c	29 Jan 2005 23:33:14 -0000	1.12
@@ -33,6 +33,7 @@
 #include <asterisk/cli.h>
 #include <asterisk/utils.h>
 #include <asterisk/lock.h>
+#include <asterisk/manager.h>
 #include "db1-ast/include/db.h"
 #include "asterisk.h"
 #include "astconf.h"
@@ -476,6 +477,65 @@
 struct ast_cli_entry cli_database_deltree =
 { { "database", "deltree", NULL }, database_deltree, "Removes database keytree/values", database_deltree_usage };
 
+static int manager_dbput(struct mansession *s, struct message *m)
+{
+	char *family = astman_get_header(m, "Family");
+	char *key = astman_get_header(m, "Key");
+	char *val = astman_get_header(m, "Val");
+	int res;
+
+	if (!strlen(family)) {
+		astman_send_error(s, m, "No family specified");
+		return 0;
+	}
+	if (!strlen(key)) {
+		astman_send_error(s, m, "No key specified");
+		return 0;
+	}
+	if (!strlen(val)) {
+		astman_send_error(s, m, "No val specified");
+		return 0;
+	}
+
+	res = ast_db_put(family, key, val);
+	if (res)
+		astman_send_error(s, m, "Failed to update entry");
+	else 
+		astman_send_ack(s, m, "Updated database successfully");
+	return 0;
+}
+
+static int manager_dbget(struct mansession *s, struct message *m)
+{
+	char *family = astman_get_header(m, "Family");
+	char *key = astman_get_header(m, "Key");
+	char tmp[256];
+	int res;
+
+	if (!strlen(family)) {
+		astman_send_error(s, m, "No family specified.");
+		return 0;
+	}
+	if (!strlen(key)) {
+		astman_send_error(s, m, "No key specified.");
+		return 0;
+	}
+
+	res = ast_db_get(family, key, tmp, sizeof(tmp));
+	if (res)
+		astman_send_error(s, m, "Database entry not found");
+	else {
+		astman_send_ack(s, m, "Result will follow");
+		manager_event(EVENT_FLAG_COMMAND,
+				"DBGetResponse",
+				"Family: %s\r\n"
+				"Key: %s\r\n"
+				"Val: %s\r\n",
+				family, key, tmp);
+	}
+	return 0;
+}
+
 int astdb_init(void)
 {
 	dbinit();
@@ -485,5 +545,7 @@
 	ast_cli_register(&cli_database_put);
 	ast_cli_register(&cli_database_del);
 	ast_cli_register(&cli_database_deltree);
+	ast_manager_register("DBGet", EVENT_FLAG_SYSTEM, manager_dbget, "Get DB Entry");
+	ast_manager_register("DBPut", EVENT_FLAG_SYSTEM, manager_dbput, "Put DB Entry");
 	return 0;
 }




More information about the svn-commits mailing list