[asterisk-commits] mnicholson: branch 1.4 r257070 - in /branches/1.4: configs/ main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Apr 13 11:46:39 CDT 2010


Author: mnicholson
Date: Tue Apr 13 11:46:30 2010
New Revision: 257070

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=257070
Log:
Add an option to restore past broken behavor of the Events manager action

Before r238915, certain values for the EventMask parameter of the Events action would result in no response being returned.  This patch adds an option to restore that broken behavior.  Also while fixing this bug I discovered that passing an empty EventMasks parameter would also result in no response being returned, this has been fixed as well while being preserved when the broken behavior is requested.

(closes issue #17023)
Reported by: nblasgen

Review: https://reviewboard.asterisk.org/r/602/

Modified:
    branches/1.4/configs/manager.conf.sample
    branches/1.4/main/manager.c

Modified: branches/1.4/configs/manager.conf.sample
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/configs/manager.conf.sample?view=diff&rev=257070&r1=257069&r2=257070
==============================================================================
--- branches/1.4/configs/manager.conf.sample (original)
+++ branches/1.4/configs/manager.conf.sample Tue Apr 13 11:46:30 2010
@@ -40,6 +40,11 @@
 ;
 ;timestampevents = yes
 
+;brokeneventsaction = yes   ; Restore previous behavior that caused the events
+                            ; action to not return a response in certain
+                            ; circumstances.  Defaults to 'no'.
+
+
 ;[mark]
 ;secret = mysecret
 ;deny=0.0.0.0/0.0.0.0

Modified: branches/1.4/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/main/manager.c?view=diff&rev=257070&r1=257069&r2=257070
==============================================================================
--- branches/1.4/main/manager.c (original)
+++ branches/1.4/main/manager.c Tue Apr 13 11:46:30 2010
@@ -103,6 +103,7 @@
 static int displayconnects = 1;
 static int timestampevents;
 static int httptimeout = 60;
+static int broken_events_action = 0;
 
 static pthread_t t;
 static int block_sockets;
@@ -1432,13 +1433,31 @@
 static int action_events(struct mansession *s, const struct message *m)
 {
 	const char *mask = astman_get_header(m, "EventMask");
-	int res;
+	int res, x;
 
 	res = set_eventmask(s->session, mask);
+	if (broken_events_action) {
+		/* if this option is set we should not return a response on
+		 * error, or when all events are set */
+
+		if (res > 0) {
+			for (x = 0; x < ARRAY_LEN(perms); x++) {
+				if (!strcasecmp(perms[x].label, "all") && res == perms[x].num) {
+					return 0;
+				}
+			}
+			astman_send_response(s, m, "Events On", NULL);
+		} else if (res == 0)
+			astman_send_response(s, m, "Events Off", NULL);
+		return 0;
+	}
+
 	if (res > 0)
 		astman_send_response(s, m, "Events On", NULL);
 	else if (res == 0)
 		astman_send_response(s, m, "Events Off", NULL);
+	else
+		astman_send_error(s, m, "Invalid event mask");
 
 	return 0;
 }
@@ -3067,6 +3086,7 @@
 	}
 	portno = DEFAULT_MANAGER_PORT;
 	displayconnects = 1;
+	broken_events_action = 0;
 	cfg = ast_config_load("manager.conf");
 	if (!cfg) {
 		ast_log(LOG_NOTICE, "Unable to open management configuration manager.conf.  Call management disabled.\n");
@@ -3093,6 +3113,9 @@
 
 	if ((val = ast_variable_retrieve(cfg, "general", "displayconnects")))
 		displayconnects = ast_true(val);
+
+	if ((val = ast_variable_retrieve(cfg, "general", "brokeneventsaction")))
+		broken_events_action = ast_true(val);
 
 	if ((val = ast_variable_retrieve(cfg, "general", "timestampevents")))
 		timestampevents = ast_true(val);




More information about the asterisk-commits mailing list