[svn-commits] jrose: trunk r415411 - in /trunk: ./ channels/ include/asterisk/ main/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Fri Jun 6 16:44:23 CDT 2014
Author: jrose
Date: Fri Jun 6 16:44:16 2014
New Revision: 415411
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=415411
Log:
chan_sip: Fix order of variables specified in SIPNotify action
Prior to this patch, sequential variables would be ordered in reverse
from the order specified in the manager action.
Review: https://reviewboard.asterisk.org/r/3588/
........
Merged revisions 415359 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 415390 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 415410 from http://svn.asterisk.org/svn/asterisk/branches/12
Modified:
trunk/ (props changed)
trunk/channels/chan_sip.c
trunk/include/asterisk/config.h
trunk/include/asterisk/manager.h
trunk/main/config.c
trunk/main/manager.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.
Modified: trunk/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_sip.c?view=diff&rev=415411&r1=415410&r2=415411
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Jun 6 16:44:16 2014
@@ -15073,7 +15073,7 @@
static int manager_sipnotify(struct mansession *s, const struct message *m)
{
const char *channame = astman_get_header(m, "Channel");
- struct ast_variable *vars = astman_get_variables(m);
+ struct ast_variable *vars = astman_get_variables_order(m, ORDER_NATURAL);
struct sip_pvt *p;
struct ast_variable *header, *var;
Modified: trunk/include/asterisk/config.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/config.h?view=diff&rev=415411&r1=415410&r2=415411
==============================================================================
--- trunk/include/asterisk/config.h (original)
+++ trunk/include/asterisk/config.h Fri Jun 6 16:44:16 2014
@@ -558,6 +558,16 @@
* (the arguments to ast_variables_new).
*/
struct ast_variable *ast_variables_dup(struct ast_variable *var);
+
+/*!
+ * \brief Reverse a variable list
+ * \param var the linked list of variables to reverse
+ * \return The head of the reversed variable list
+ *
+ * \note The variable list var is not preserved in this function and should
+ * not be used after reversing it.
+ */
+struct ast_variable *ast_variables_reverse(struct ast_variable *var);
/*!
* \brief Free variable list
Modified: trunk/include/asterisk/manager.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/manager.h?view=diff&rev=415411&r1=415410&r2=415411
==============================================================================
--- trunk/include/asterisk/manager.h (original)
+++ trunk/include/asterisk/manager.h Fri Jun 6 16:44:16 2014
@@ -260,8 +260,20 @@
/*! \brief Get header from mananger transaction */
const char *astman_get_header(const struct message *m, char *var);
-/*! \brief Get a linked list of the Variable: headers */
+/*! \brief Get a linked list of the Variable: headers
+ *
+ * \note Order of variables is reversed from the order they are specified in
+ * the manager message
+ */
struct ast_variable *astman_get_variables(const struct message *m);
+
+enum variable_orders {
+ ORDER_NATURAL,
+ ORDER_REVERSE
+};
+
+/*! \brief Get a linked list of the Variable: headers with order specified */
+struct ast_variable *astman_get_variables_order(const struct message *m, enum variable_orders order);
/*! \brief Send error in manager transaction */
void astman_send_error(struct mansession *s, const struct message *m, char *error);
Modified: trunk/main/config.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/config.c?view=diff&rev=415411&r1=415410&r2=415411
==============================================================================
--- trunk/main/config.c (original)
+++ trunk/main/config.c Fri Jun 6 16:44:16 2014
@@ -560,6 +560,30 @@
}
return cloned;
+}
+
+struct ast_variable *ast_variables_reverse(struct ast_variable *var)
+{
+ struct ast_variable *var1, *var2;
+
+ var1 = var;
+
+ if (!var1 || !var1->next) {
+ return var1;
+ }
+
+ var2 = var1->next;
+ var1->next = NULL;
+
+ while (var2) {
+ struct ast_variable *next = var2->next;
+
+ var2->next = var1;
+ var1 = var2;
+ var2 = next;
+ }
+
+ return var1;
}
void ast_variables_destroy(struct ast_variable *v)
Modified: trunk/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/manager.c?view=diff&rev=415411&r1=415410&r2=415411
==============================================================================
--- trunk/main/manager.c (original)
+++ trunk/main/manager.c Fri Jun 6 16:44:16 2014
@@ -2390,6 +2390,12 @@
struct ast_variable *astman_get_variables(const struct message *m)
{
+ return astman_get_variables_order(m, ORDER_REVERSE);
+}
+
+struct ast_variable *astman_get_variables_order(const struct message *m,
+ enum variable_orders order)
+{
int varlen;
int x;
struct ast_variable *head = NULL;
@@ -2403,6 +2409,10 @@
continue;
}
head = man_do_variable_value(head, m->headers[x] + varlen);
+ }
+
+ if (order == ORDER_NATURAL) {
+ head = ast_variables_reverse(head);
}
return head;
More information about the svn-commits
mailing list