--- main/db.c.orig 2017-02-01 13:38:44.185110829 +0100
+++ main/db.c 2017-02-01 20:20:07.602165316 +0100
@@ -65,10 +65,21 @@
+
+
+ Get DB Entry List.
+
+
+
+
+
+
+
+
Put DB entry.
@@ -877,10 +888,76 @@
idText);
}
return 0;
}
+static int manager_dbshow(struct mansession *s, const struct message *m)
+{
+ const char *id = astman_get_header(m, "ActionID");
+ const char *family = astman_get_header(m, "Family");
+ char prefix[MAX_DB_FIELD];
+ char idText[256] = "";
+ sqlite3_stmt *stmt = gettree_stmt;
+
+ if (!ast_strlen_zero(family)) {
+ /* Family specified */
+ snprintf(prefix, sizeof(prefix), "/%s", family);
+ } else {
+ /* Nothing specified */
+ prefix[0] = '\0';
+ stmt = gettree_all_stmt;
+ }
+
+ if (!ast_strlen_zero(id))
+ snprintf(idText, sizeof(idText) ,"ActionID: %s\r\n", id);
+
+ ast_mutex_lock(&dblock);
+ if (!ast_strlen_zero(prefix) && (sqlite3_bind_text(stmt, 1, prefix, -1, SQLITE_STATIC) != SQLITE_OK)) {
+ astman_send_error(s, m, "DB ERROR\n");
+ ast_log(LOG_WARNING, "Could bind %s to stmt: %s\n", prefix, sqlite3_errmsg(astdb));
+ sqlite3_reset(stmt);
+ ast_mutex_unlock(&dblock);
+ return 0;
+ }
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ const char *value_s, *family_s;
+ char *saveptr, *split, *key_s;
+ int i;
+ if (!(key_s = (char *) sqlite3_column_text(stmt, 0))) {
+ ast_log(LOG_WARNING, "Skipping invalid key!\n");
+ continue;
+ }
+ if (!(value_s = (const char *) sqlite3_column_text(stmt, 1))) {
+ ast_log(LOG_WARNING, "Skipping invalid value!\n");
+ continue;
+ }
+ for (i = 0; ; i++, key_s = NULL)
+ {
+ split = strtok_r(key_s, "/", &saveptr);
+ if(!i){ family_s = split; }
+ else{ break; }
+ }
+ astman_send_ack(s, m, "Result will follow");
+ astman_append(s, "Event: DBShowResponse\r\n"
+ "Family: %s\r\n"
+ "Key: %s\r\n"
+ "Val: %s\r\n"
+ "%s"
+ "\r\n",
+ family_s, split, value_s, idText);
+ }
+ astman_append(s, "Event: DBShowComplete\r\n"
+ "%s"
+ "\r\n",
+ idText);
+ sqlite3_reset(stmt);
+ ast_mutex_unlock(&dblock);
+
+ return 0;
+}
+
static int manager_dbdel(struct mansession *s, const struct message *m)
{
const char *family = astman_get_header(m, "Family");
const char *key = astman_get_header(m, "Key");
int res;
@@ -1020,10 +1097,11 @@
}
ast_register_atexit(astdb_atexit);
ast_cli_register_multiple(cli_database, ARRAY_LEN(cli_database));
ast_manager_register_xml_core("DBGet", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_dbget);
+ ast_manager_register_xml_core("DBShow", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_dbshow);
ast_manager_register_xml_core("DBPut", EVENT_FLAG_SYSTEM, manager_dbput);
ast_manager_register_xml_core("DBDel", EVENT_FLAG_SYSTEM, manager_dbdel);
ast_manager_register_xml_core("DBDelTree", EVENT_FLAG_SYSTEM, manager_dbdeltree);
return 0;
}