[asterisk-commits] mmichelson: branch group/CCSS r247900 - /team/group/CCSS/main/ccss.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Feb 19 10:16:11 CST 2010
Author: mmichelson
Date: Fri Feb 19 10:16:08 2010
New Revision: 247900
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=247900
Log:
Add CLI command to cancel CC requests.
Modified:
team/group/CCSS/main/ccss.c
Modified: team/group/CCSS/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=247900&r1=247899&r2=247900
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Fri Feb 19 10:16:08 2010
@@ -3965,8 +3965,63 @@
return CLI_SUCCESS;
}
+static int kill_cores(void *obj, void *arg, int flags)
+{
+ int *core_id = arg;
+ struct cc_core_instance *core_instance = obj;
+
+ if (!core_id || (core_instance->core_id == *core_id)) {
+ ast_cc_failed(core_instance->core_id, "CC transaction canceled administratively\n");
+ }
+ return 0;
+}
+
+static char *handle_cc_kill(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ static const char * const option[] = { "core", "all", NULL };
+
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "cc cancel";
+ e->usage =
+ "Usage: cc cancel can be used in two ways.\n"
+ " 1. 'cc cancel core [core ID]' will cancel the CC transaction with\n"
+ " core ID equal to the specified core ID.\n"
+ " 2. 'cc cancel all' will cancel all active CC transacitons.\n";
+ return NULL;
+ case CLI_GENERATE:
+ if (a->pos == 2) {
+ return ast_cli_complete(a->word, option, a->n);
+ }
+ return NULL;
+ }
+
+ if (a->argc == 4) {
+ int core_id;
+ char *endptr;
+ if (strcasecmp(a->argv[2], "core")) {
+ return CLI_SHOWUSAGE;
+ }
+ core_id = strtol(a->argv[3], &endptr, 10);
+ if ((errno != 0 && core_id == 0) || (endptr == a->argv[3])) {
+ return CLI_SHOWUSAGE;
+ }
+ ao2_t_callback(cc_core_instances, OBJ_NODATA, kill_cores, &core_id, "CLI Killing Core Id");
+ } else if (a->argc == 3) {
+ if (strcasecmp(a->argv[2], "all")) {
+ return CLI_SHOWUSAGE;
+ }
+ ao2_t_callback(cc_core_instances, OBJ_NODATA, kill_cores, NULL, "CLI Killing all CC cores");
+ } else {
+ return CLI_SHOWUSAGE;
+ }
+
+ return CLI_SUCCESS;
+}
+
static struct ast_cli_entry cc_cli[] = {
AST_CLI_DEFINE(handle_cc_status, "Reports CC stats"),
+ AST_CLI_DEFINE(handle_cc_kill, "Kill a CC transaction"),
};
int ast_cc_init(void)
More information about the asterisk-commits
mailing list