diff --git a/db.c b/db.c index 146fa7ba6f5ff473968728290731c65dc6931d6a..e434a39602ca9b7ad1de938a50661afb49d0c1ae 100755 --- a/db.c +++ b/db.c @@ -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_del = 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 @@ int astdb_init(void) 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; }