aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xChangeLog2
-rwxr-xr-xmanager.c36
2 files changed, 24 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index e9d721595..30cc205d1 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2005-11-07 Kevin P. Fleming <kpfleming@digium.com>
+ * manager.c (astman_get_variables): restore old multiple-variable behavior for "Variable" header (issue #5585)
+
* many files: don't check for NULL before calling ast_strlen_zero, it can do it itself (issue #5648)
* pbx.c (handle_show_hints): use proper state-to-string function for hint state (issue #5583)
diff --git a/manager.c b/manager.c
index f0f7a8752..1f38db260 100755
--- a/manager.c
+++ b/manager.c
@@ -309,26 +309,34 @@ char *astman_get_header(struct message *m, char *var)
struct ast_variable *astman_get_variables(struct message *m)
{
- int varlen, x;
+ int varlen, x, y;
struct ast_variable *head = NULL, *cur;
char *var, *val;
+ unsigned int var_count;
+ char *vars[32];
varlen = strlen("Variable: ");
for (x = 0; x < m->hdrcount; x++) {
- if (!strncasecmp("Variable: ", m->headers[x], varlen)) {
- var = val = ast_strdupa(m->headers[x] + varlen);
- if (!var)
- return head;
- strsep(&val, "=");
- if (!val || ast_strlen_zero(var))
- continue;
- cur = ast_variable_new(var, val);
- if (head) {
- cur->next = head;
- head = cur;
- } else
- head = cur;
+ if (strncasecmp("Variable: ", m->headers[x], varlen))
+ continue;
+
+ if (!(var = ast_strdupa(m->headers[x] + varlen)))
+ return head;
+
+ if ((var_count = ast_app_separate_args(var, '|', vars, sizeof(vars) / sizeof(var[0])))) {
+ for (y = 0; y < var_count; y++) {
+ var = val = vars[y];
+ strsep(&val, "=");
+ if (!val || ast_strlen_zero(var))
+ continue;
+ cur = ast_variable_new(var, val);
+ if (head) {
+ cur->next = head;
+ head = cur;
+ } else
+ head = cur;
+ }
}
}