]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-4352 --resolve alternate implementation as multiset to avoid regressions on set
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 7 Aug 2012 04:50:39 +0000 (23:50 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 7 Aug 2012 04:50:39 +0000 (23:50 -0500)
src/mod/applications/mod_dptools/mod_dptools.c

index 5ca719e8d2e31764040dd2a9acbfe64b3f2b780c..92eba0f568e0a75161f56eb0d8e7d2efa7a62315 100755 (executable)
@@ -1326,6 +1326,33 @@ static void base_set (switch_core_session_t *session, const char *data, switch_s
        }
 }
 
+SWITCH_STANDARD_APP(multiset_function)
+{
+       char delim = ' ';
+       char *arg = (char *) data;
+
+       if (!zstr(arg) && *arg == '^' && *(arg+1) == '^') {
+               arg += 2;
+               delim = *arg++;
+       }
+
+       if (arg) {
+               char *array[256] = {0};
+               int i, argc;
+
+               arg = switch_core_session_strdup(session, arg);
+               argc = switch_split(arg, delim, array);
+               
+               for(i = 0; i < argc; i++) {
+                       base_set(session, array[i], SWITCH_STACK_BOTTOM);
+               }
+               
+
+       } else {
+               base_set(session, data, SWITCH_STACK_BOTTOM);
+       }
+}
+
 SWITCH_STANDARD_APP(set_function)
 {
        base_set(session, data, SWITCH_STACK_BOTTOM);
@@ -4672,6 +4699,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
        SWITCH_ADD_APP(app_interface, "set", "Set a channel variable", SET_LONG_DESC, set_function, "<varname>=<value>",
                                   SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC);
 
+       SWITCH_ADD_APP(app_interface, "multiset", "Set many channel variables", SET_LONG_DESC, multiset_function, "[^^<delim>]<varname>=<value> <var2>=<val2>",
+                                  SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC);
+
        SWITCH_ADD_APP(app_interface, "push", "Set a channel variable", SET_LONG_DESC, push_function, "<varname>=<value>",
                                   SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC);