[asterisk-commits] eliel: branch group/data_api_gsoc2009 r210633 - /team/group/data_api_gsoc2009...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Aug 5 14:36:38 CDT 2009
Author: eliel
Date: Wed Aug 5 14:36:32 2009
New Revision: 210633
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=210633
Log:
Add a new CLI command "data show providers" to list all the
registered providers.
Modified:
team/group/data_api_gsoc2009/main/data.c
Modified: team/group/data_api_gsoc2009/main/data.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/data_api_gsoc2009/main/data.c?view=diff&rev=210633&r1=210632&r2=210633
==============================================================================
--- team/group/data_api_gsoc2009/main/data.c (original)
+++ team/group/data_api_gsoc2009/main/data.c Wed Aug 5 14:36:32 2009
@@ -2476,7 +2476,7 @@
e->command = "data get";
e->usage = ""
"Usage: data get <path> [<search> [<filter>]]\n"
- " get the tree based on a path.\n";
+ " Get the tree based on a path.\n";
return NULL;
case CLI_GENERATE:
return NULL;
@@ -2510,10 +2510,81 @@
/*!
* \internal
+ * \brief Print the list of data providers.
+ * \param[in] fd The CLI file descriptor.
+ * \param[in] name The last node visited name.
+ * \param[in] container The childrens of the last node.
+ * \param[in] path The path to the current node.
+ */
+static void data_provider_print_cli(int fd, const char *name, struct ao2_container *container, struct ast_str *path)
+{
+ struct ao2_iterator i;
+ struct ast_str *current_path;
+ struct data_provider *provider;
+
+ current_path = ast_str_create(60);
+ if (!current_path) {
+ return;
+ }
+
+ ast_str_reset(current_path);
+ if (path) {
+ ast_str_set(¤t_path, 0, "%s/%s", ast_str_buffer(path), name);
+ } else {
+ ast_str_set(¤t_path, 0, "%s", name);
+ }
+
+ i = ao2_iterator_init(container, 0);
+ while ((provider = ao2_iterator_next(&i))) {
+ if (provider->handler) {
+ /* terminal node, print it. */
+ ast_cli(fd, "%s/%s (", ast_str_buffer(current_path),
+ provider->name);
+ if (provider->handler->get) {
+ ast_cli(fd, "get");
+ }
+ if (provider->handler->put) {
+ ast_cli(fd, "%sput", (provider->handler->get ? "," : ""));
+ }
+ ast_cli(fd, ") [%s]\n", provider->registrar);
+ }
+ data_provider_print_cli(fd, provider->name, provider->children, current_path);
+ ao2_ref(provider, -1);
+ }
+
+ ast_free(current_path);
+}
+
+/*!
+ * \brief Handle CLI command "data show providers"
+ */
+static char *handle_cli_data_show_providers(struct ast_cli_entry *e, int cmd,
+ struct ast_cli_args *a)
+{
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "data show providers";
+ e->usage = ""
+ "Usage: data show providers\n"
+ " Show the list of registered providers\n";
+ return NULL;
+ case CLI_GENERATE:
+ return NULL;
+ }
+
+ data_read_lock();
+ data_provider_print_cli(a->fd, "", root_data.container, NULL);
+ data_unlock();
+
+ return CLI_SUCCESS;
+}
+/*!
+ * \internal
* \brief Data API CLI commands.
*/
static struct ast_cli_entry cli_data[] = {
AST_CLI_DEFINE(handle_cli_data_get, "Data API get"),
+ AST_CLI_DEFINE(handle_cli_data_show_providers, "Show providers")
};
int ast_data_init(void)
More information about the asterisk-commits
mailing list