Index: main/db.c =================================================================== --- main/db.c (revision 83517) +++ main/db.c (working copy) @@ -240,68 +240,120 @@ return res; } -static int database_put(int fd, int argc, char *argv[]) +static char *handle_cli_database_put(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { int res; - if (argc != 5) - return RESULT_SHOWUSAGE; - res = ast_db_put(argv[2], argv[3], argv[4]); + + switch (cmd) { + case CLI_INIT: + e->command = "database put"; + e->usage = + "Usage: database put \n" + " Adds or updates an entry in the Asterisk database for\n" + " a given family, key, and value.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if (a->argc != 5) + return CLI_SHOWUSAGE; + res = ast_db_put(a->argv[2], a->argv[3], a->argv[4]); if (res) { - ast_cli(fd, "Failed to update entry\n"); + ast_cli(a->fd, "Failed to update entry\n"); } else { - ast_cli(fd, "Updated database successfully\n"); + ast_cli(a->fd, "Updated database successfully\n"); } - return RESULT_SUCCESS; + return CLI_SUCCESS; } -static int database_get(int fd, int argc, char *argv[]) +static char *handle_cli_database_get(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { int res; char tmp[256]; - if (argc != 4) - return RESULT_SHOWUSAGE; - res = ast_db_get(argv[2], argv[3], tmp, sizeof(tmp)); + + switch (cmd) { + case CLI_INIT: + e->command = "database get"; + e->usage = + "Usage: database get \n" + " Retrieves an entry in the Asterisk database for a given\n" + " family and key.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if (a->argc != 4) + return CLI_SHOWUSAGE; + res = ast_db_get(a->argv[2], a->argv[3], tmp, sizeof(tmp)); if (res) { - ast_cli(fd, "Database entry not found.\n"); + ast_cli(a->fd, "Database entry not found.\n"); } else { - ast_cli(fd, "Value: %s\n", tmp); + ast_cli(a->fd, "Value: %s\n", tmp); } - return RESULT_SUCCESS; + return CLI_SUCCESS; } -static int database_del(int fd, int argc, char *argv[]) +static char *handle_cli_database_del(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { int res; - if (argc != 4) - return RESULT_SHOWUSAGE; - res = ast_db_del(argv[2], argv[3]); + + switch (cmd) { + case CLI_INIT: + e->command = "database del"; + e->usage = + "Usage: database del \n" + " Deletes an entry in the Asterisk database for a given\n" + " family and key.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if (a->argc != 4) + return CLI_SHOWUSAGE; + res = ast_db_del(a->argv[2], a->argv[3]); if (res) { - ast_cli(fd, "Database entry does not exist.\n"); + ast_cli(a->fd, "Database entry does not exist.\n"); } else { - ast_cli(fd, "Database entry removed.\n"); + ast_cli(a->fd, "Database entry removed.\n"); } - return RESULT_SUCCESS; + return CLI_SUCCESS; } -static int database_deltree(int fd, int argc, char *argv[]) +static char *handle_cli_database_deltree(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { int res; - if ((argc < 3) || (argc > 4)) - return RESULT_SHOWUSAGE; - if (argc == 4) { - res = ast_db_deltree(argv[2], argv[3]); + + switch (cmd) { + case CLI_INIT: + e->command = "database deltree"; + e->usage = + "Usage: database deltree [keytree]\n" + " Deletes a family or specific keytree within a family\n" + " in the Asterisk database.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if ((a->argc < 3) || (a->argc > 4)) + return CLI_SHOWUSAGE; + if (a->argc == 4) { + res = ast_db_deltree(a->argv[2], a->argv[3]); } else { - res = ast_db_deltree(argv[2], NULL); + res = ast_db_deltree(a->argv[2], NULL); } if (res < 0) { - ast_cli(fd, "Database entries do not exist.\n"); + ast_cli(a->fd, "Database entries do not exist.\n"); } else { - ast_cli(fd, "%d database entries removed.\n",res); + ast_cli(a->fd, "%d database entries removed.\n",res); } - return RESULT_SUCCESS; + return CLI_SUCCESS; } -static int database_show(int fd, int argc, char *argv[]) +static char *handle_cli_database_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { char prefix[256]; DBT key, data; @@ -310,23 +362,35 @@ int pass; int counter = 0; - if (argc == 4) { + switch (cmd) { + case CLI_INIT: + e->command = "database show"; + e->usage = + "Usage: database show [family [keytree]]\n" + " Shows Asterisk database contents, optionally restricted\n" + " to a given family, or family and keytree.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if (a->argc == 4) { /* Family and key tree */ - snprintf(prefix, sizeof(prefix), "/%s/%s", argv[2], argv[3]); - } else if (argc == 3) { + snprintf(prefix, sizeof(prefix), "/%s/%s", a->argv[2], a->argv[3]); + } else if (a->argc == 3) { /* Family only */ - snprintf(prefix, sizeof(prefix), "/%s", argv[2]); - } else if (argc == 2) { + snprintf(prefix, sizeof(prefix), "/%s", a->argv[2]); + } else if (a->argc == 2) { /* Neither */ prefix[0] = '\0'; } else { - return RESULT_SHOWUSAGE; + return CLI_SHOWUSAGE; } ast_mutex_lock(&dblock); if (dbinit()) { ast_mutex_unlock(&dblock); - ast_cli(fd, "Database unavailable\n"); - return RESULT_SUCCESS; + ast_cli(a->fd, "Database unavailable\n"); + return CLI_SUCCESS; } memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); @@ -345,16 +409,16 @@ values = ""; } if (keymatch(keys, prefix)) { - ast_cli(fd, "%-50s: %-25s\n", keys, values); + ast_cli(a->fd, "%-50s: %-25s\n", keys, values); counter++; } } ast_mutex_unlock(&dblock); - ast_cli(fd, "%d results found.\n", counter); - return RESULT_SUCCESS; + ast_cli(a->fd, "%d results found.\n", counter); + return CLI_SUCCESS; } -static int database_showkey(int fd, int argc, char *argv[]) +static char *handle_cli_database_showkey(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { char suffix[256]; DBT key, data; @@ -363,17 +427,28 @@ int pass; int counter = 0; - if (argc == 3) { + switch (cmd) { + case CLI_INIT: + e->command = "database show"; + e->usage = + "Usage: database showkey \n" + " Shows Asterisk database contents, restricted to a given key.\n"; + return NULL; + case CLI_GENERATE: + return NULL; + } + + if (a->argc == 3) { /* Key only */ - snprintf(suffix, sizeof(suffix), "/%s", argv[2]); + snprintf(suffix, sizeof(suffix), "/%s", a->argv[2]); } else { - return RESULT_SHOWUSAGE; + return CLI_SHOWUSAGE; } ast_mutex_lock(&dblock); if (dbinit()) { ast_mutex_unlock(&dblock); - ast_cli(fd, "Database unavailable\n"); - return RESULT_SUCCESS; + ast_cli(a->fd, "Database unavailable\n"); + return CLI_SUCCESS; } memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); @@ -392,13 +467,13 @@ values = ""; } if (subkeymatch(keys, suffix)) { - ast_cli(fd, "%-50s: %-25s\n", keys, values); + ast_cli(a->fd, "%-50s: %-25s\n", keys, values); counter++; } } ast_mutex_unlock(&dblock); - ast_cli(fd, "%d results found.\n", counter); - return RESULT_SUCCESS; + ast_cli(a->fd, "%d results found.\n", counter); + return CLI_SUCCESS; } struct ast_db_entry *ast_db_gettree(const char *family, const char *keytree) @@ -473,59 +548,13 @@ } } -static const char database_show_usage[] = -"Usage: database show [family [keytree]]\n" -" Shows Asterisk database contents, optionally restricted\n" -"to a given family, or family and keytree.\n"; - -static const char database_showkey_usage[] = -"Usage: database showkey \n" -" Shows Asterisk database contents, restricted to a given key.\n"; - -static const char database_put_usage[] = -"Usage: database put \n" -" Adds or updates an entry in the Asterisk database for\n" -"a given family, key, and value.\n"; - -static const char database_get_usage[] = -"Usage: database get \n" -" Retrieves an entry in the Asterisk database for a given\n" -"family and key.\n"; - -static const char database_del_usage[] = -"Usage: database del \n" -" Deletes an entry in the Asterisk database for a given\n" -"family and key.\n"; - -static const char database_deltree_usage[] = -"Usage: database deltree [keytree]\n" -" Deletes a family or specific keytree within a family\n" -"in the Asterisk database.\n"; - struct ast_cli_entry cli_database[] = { - { { "database", "show", NULL }, - database_show, "Shows database contents", - database_show_usage }, - - { { "database", "showkey", NULL }, - database_showkey, "Shows database contents", - database_showkey_usage }, - - { { "database", "get", NULL }, - database_get, "Gets database value", - database_get_usage }, - - { { "database", "put", NULL }, - database_put, "Adds/updates database value", - database_put_usage }, - - { { "database", "del", NULL }, - database_del, "Removes database key/value", - database_del_usage }, - - { { "database", "deltree", NULL }, - database_deltree, "Removes database keytree/values", - database_deltree_usage }, + NEW_CLI(handle_cli_database_show, "Shows database contents"), + NEW_CLI(handle_cli_database_showkey, "Shows database contents"), + NEW_CLI(handle_cli_database_get, "Gets database value"), + NEW_CLI(handle_cli_database_put, "Adds/updates database value"), + NEW_CLI(handle_cli_database_del, "Removes database key/value"), + NEW_CLI(handle_cli_database_deltree, "Removes database keytree/values") }; static int manager_dbput(struct mansession *s, const struct message *m)