diff options
-rw-r--r-- | configs/manager.conf.sample | 4 | ||||
-rw-r--r-- | main/manager.c | 26 |
2 files changed, 29 insertions, 1 deletions
diff --git a/configs/manager.conf.sample b/configs/manager.conf.sample index 0fd4ccbaa..79c1ba82e 100644 --- a/configs/manager.conf.sample +++ b/configs/manager.conf.sample @@ -56,6 +56,10 @@ bindaddr = 0.0.0.0 ; ;timestampevents = yes +;brokeneventsaction = yes ; Restore previous behavior that caused the events + ; action to not return a response in certain + ; circumstances. Defaults to 'no'. + ; debug = on ; enable some debugging info in AMI messages (default off). ; Also accessible through the "manager debug" CLI command. ;[mark] diff --git a/main/manager.c b/main/manager.c index fe185393a..f7566d47f 100644 --- a/main/manager.c +++ b/main/manager.c @@ -123,6 +123,7 @@ static int displayconnects = 1; static int allowmultiplelogin = 1; static int timestampevents; static int httptimeout = 60; +static int broken_events_action = 0; static int manager_enabled = 0; static int webmanager_enabled = 0; @@ -1697,15 +1698,36 @@ static char mandescr_events[] = 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, 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_append(s, "Response: Success\r\n" + "Events: On\r\n\r\n"); + } else if (res == 0) + astman_append(s, "Response: Success\r\n" + "Events: Off\r\n\r\n"); + return 0; + } + if (res > 0) astman_append(s, "Response: Success\r\n" "Events: On\r\n\r\n"); else if (res == 0) astman_append(s, "Response: Success\r\n" "Events: Off\r\n\r\n"); + else + astman_send_error(s, m, "Invalid event mask"); + return 0; } @@ -4145,6 +4167,8 @@ static int __init_manager(int reload) ast_log(LOG_WARNING, "Invalid address '%s' specified, using 0.0.0.0\n", val); memset(&ami_desc.local_address.sin_addr, 0, sizeof(ami_desc.local_address.sin_addr)); } + } else if (!strcasecmp(var->name, "brokeneventsaction")) { + broken_events_action = ast_true(val); } else if (!strcasecmp(var->name, "allowmultiplelogin")) { allowmultiplelogin = ast_true(val); } else if (!strcasecmp(var->name, "displayconnects")) { |