[asterisk-commits] russell: branch russell/func_devstate r54220 - in /team/russell/func_devstate...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Feb 13 14:10:46 MST 2007


Author: russell
Date: Tue Feb 13 15:10:46 2007
New Revision: 54220

URL: http://svn.digium.com/view/asterisk?view=rev&rev=54220
Log:
- Implement a CLI command to list the current state of all known custom
  device states.

- Make ast_cli_(un)register_multiple return success or failure
- Make ast_devstate_prov_del() return success or failure

Modified:
    team/russell/func_devstate/funcs/func_devstate.c
    team/russell/func_devstate/include/asterisk/cli.h
    team/russell/func_devstate/include/asterisk/devicestate.h
    team/russell/func_devstate/main/cli.c
    team/russell/func_devstate/main/devicestate.c

Modified: team/russell/func_devstate/funcs/func_devstate.c
URL: http://svn.digium.com/view/asterisk/team/russell/func_devstate/funcs/func_devstate.c?view=diff&rev=54220&r1=54219&r2=54220
==============================================================================
--- team/russell/func_devstate/funcs/func_devstate.c (original)
+++ team/russell/func_devstate/funcs/func_devstate.c Tue Feb 13 15:10:46 2007
@@ -40,6 +40,7 @@
 #include "asterisk/utils.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/devicestate.h"
+#include "asterisk/cli.h"
 
 struct custom_device {
 	int state;
@@ -106,6 +107,48 @@
 	return state;
 }
 
+static char *cli_funcdevstate_list(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	struct custom_device *dev;
+
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "funcdevstate list";
+		e->usage =
+			"Usage: funcdevstate list\n"
+			"       List all custom device states that have been set by using\n"
+			"       the DEVSTATE dialplan function.\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	}
+
+	if (a->argc != e->args)
+		return CLI_SHOWUSAGE;
+
+	ast_cli(a->fd, "\n"
+	        "---------------------------------------------------------------------\n"
+	        "--- Custom Device States --------------------------------------------\n"
+	        "---------------------------------------------------------------------\n"
+	        "---\n");
+	AST_RWLIST_RDLOCK(&custom_devices);
+	AST_RWLIST_TRAVERSE(&custom_devices, dev, entry) {
+		ast_cli(a->fd, "--- Name: 'Custom:%s'  State: '%s'\n"
+		               "---\n", dev->name, ast_devstate_str(dev->state));
+	}
+	AST_RWLIST_UNLOCK(&custom_devices);
+	ast_cli(a->fd,
+	        "---------------------------------------------------------------------\n"
+	        "---------------------------------------------------------------------\n"
+	        "\n");
+
+	return CLI_SUCCESS;
+}
+
+static struct ast_cli_entry cli_funcdevstate[] = {
+	NEW_CLI(cli_funcdevstate_list, "List currently known custom device states"),
+};
+
 static struct ast_custom_function devstate_function = {
 	.name = "DEVSTATE",
 	.synopsis = "Get or Set a device state",
@@ -120,7 +163,8 @@
 	int res = 0;
 
 	res |= ast_custom_function_unregister(&devstate_function);
-	ast_devstate_prov_del("Custom");
+	res |= ast_devstate_prov_del("Custom");
+	res |= ast_cli_unregister_multiple(cli_funcdevstate, ARRAY_LEN(cli_funcdevstate));
 
 	AST_RWLIST_WRLOCK(&custom_devices);
 	while ((dev = AST_RWLIST_REMOVE_HEAD(&custom_devices, entry)))
@@ -136,6 +180,7 @@
 
 	res |= ast_custom_function_register(&devstate_function);
 	res |= ast_devstate_prov_add("Custom", custom_devstate_callback);
+	res |= ast_cli_register_multiple(cli_funcdevstate, ARRAY_LEN(cli_funcdevstate));
 
 	return res;
 }

Modified: team/russell/func_devstate/include/asterisk/cli.h
URL: http://svn.digium.com/view/asterisk/team/russell/func_devstate/include/asterisk/cli.h?view=diff&rev=54220&r1=54219&r2=54220
==============================================================================
--- team/russell/func_devstate/include/asterisk/cli.h (original)
+++ team/russell/func_devstate/include/asterisk/cli.h Tue Feb 13 15:10:46 2007
@@ -235,7 +235,7 @@
  * \param e pointer to first cli entry to register
  * \param len number of entries to register
  */
-void ast_cli_register_multiple(struct ast_cli_entry *e, int len);
+int ast_cli_register_multiple(struct ast_cli_entry *e, int len);
 
 /*! \brief Unregisters a command or an array of commands
  *
@@ -250,7 +250,7 @@
  * \param e pointer to first cli entry to unregister
  * \param len number of entries to unregister
  */
-void ast_cli_unregister_multiple(struct ast_cli_entry *e, int len);
+int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len);
 
 /*! \brief Readline madness
  * Useful for readline, that's about it

Modified: team/russell/func_devstate/include/asterisk/devicestate.h
URL: http://svn.digium.com/view/asterisk/team/russell/func_devstate/include/asterisk/devicestate.h?view=diff&rev=54220&r1=54219&r2=54220
==============================================================================
--- team/russell/func_devstate/include/asterisk/devicestate.h (original)
+++ team/russell/func_devstate/include/asterisk/devicestate.h Tue Feb 13 15:10:46 2007
@@ -127,9 +127,9 @@
 
 /*! \brief Remove device state provider 
  * \param label to use in hint, like label:object
- * Return -1 on failure, ID on success
+ * Return -1 on failure, 0 on success
  */ 
-void ast_devstate_prov_del(const char *label);
+int ast_devstate_prov_del(const char *label);
 
 int ast_device_state_engine_init(void);
 

Modified: team/russell/func_devstate/main/cli.c
URL: http://svn.digium.com/view/asterisk/team/russell/func_devstate/main/cli.c?view=diff&rev=54220&r1=54219&r2=54220
==============================================================================
--- team/russell/func_devstate/main/cli.c (original)
+++ team/russell/func_devstate/main/cli.c Tue Feb 13 15:10:46 2007
@@ -1354,20 +1354,24 @@
 /*
  * register/unregister an array of entries.
  */
-void ast_cli_register_multiple(struct ast_cli_entry *e, int len)
-{
-	int i;
+int ast_cli_register_multiple(struct ast_cli_entry *e, int len)
+{
+	int i, res = 0;
 
 	for (i = 0; i < len; i++)
-		ast_cli_register(e + i);
-}
-
-void ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
-{
-	int i;
+		res |= ast_cli_register(e + i);
+
+	return res;
+}
+
+int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
+{
+	int i, res = 0;
 
 	for (i = 0; i < len; i++)
-		ast_cli_unregister(e + i);
+		res |= ast_cli_unregister(e + i);
+
+	return res;
 }
 
 

Modified: team/russell/func_devstate/main/devicestate.c
URL: http://svn.digium.com/view/asterisk/team/russell/func_devstate/main/devicestate.c?view=diff&rev=54220&r1=54219&r2=54220
==============================================================================
--- team/russell/func_devstate/main/devicestate.c (original)
+++ team/russell/func_devstate/main/devicestate.c Tue Feb 13 15:10:46 2007
@@ -339,20 +339,24 @@
 }
 
 /*! \brief Remove device state provider */
-void ast_devstate_prov_del(const char *label)
+int ast_devstate_prov_del(const char *label)
 {
 	struct devstate_prov *devcb;
+	int res = -1;
 
 	AST_RWLIST_WRLOCK(&devstate_provs);
 	AST_RWLIST_TRAVERSE_SAFE_BEGIN(&devstate_provs, devcb, list) {
 		if (!strcasecmp(devcb->label, label)) {
 			AST_RWLIST_REMOVE_CURRENT(&devstate_provs, list);
 			free(devcb);
+			res = 0;
 			break;
 		}
 	}
 	AST_RWLIST_TRAVERSE_SAFE_END;
 	AST_RWLIST_UNLOCK(&devstate_provs);
+
+	return res;
 }
 
 /*! \brief Get provider device state */



More information about the asterisk-commits mailing list