--- asterisk/db.c 2004-12-21 18:07:02.000000000 -0700 +++ asterisk-20041222/db.c 2005-01-03 23:58:01.000000000 -0700 @@ -33,6 +33,7 @@ #include #include #include +#include #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", 0, manager_dbget, "Get DB Entry"); + ast_manager_register("DBPut", 0, manager_dbput, "Put DB Entry"); return 0; }