[Freeswitch-svn] [commit] r5938 - in freeswitch/trunk/src: . mod/dialplans/mod_dialplan_xml
Freeswitch SVN
anthm at freeswitch.org
Wed Oct 17 14:26:09 EDT 2007
Author: anthm
Date: Wed Oct 17 14:26:08 2007
New Revision: 5938
Modified:
freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
freeswitch/trunk/src/switch_channel.c
Log:
change dialplan a little
Modified: freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
==============================================================================
--- freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c (original)
+++ freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c Wed Oct 17 14:26:08 2007
@@ -50,7 +50,8 @@
switch_channel_t *channel;
char *exten_name = (char *) switch_xml_attr_soft(xexten, "name");
int proceed = 0;
- switch_stream_handle_t stream = { 0 };
+ char *expression_expanded = NULL, *field_expanded = NULL;
+
channel = switch_core_session_get_channel(session);
@@ -63,9 +64,18 @@
int ovector[30];
break_t do_break_i = BREAK_ON_FALSE;
+ switch_safe_free(field_expanded);
+ switch_safe_free(expression_expanded);
+
field = (char *) switch_xml_attr(xcond, "field");
expression = (char *) switch_xml_attr_soft(xcond, "expression");
+
+ if ((expression_expanded = switch_channel_expand_variables(channel, expression)) == expression) {
+ expression_expanded = NULL;
+ } else {
+ expression = expression_expanded;
+ }
if ((do_break_a = (char *) switch_xml_attr(xcond, "break"))) {
if (!strcasecmp(do_break_a, "on-true")) {
@@ -80,32 +90,12 @@
}
if (field) {
- if (*field == '$') {
- char *cmd = switch_core_session_strdup(session, field + 1);
- char *e, *arg;
- field = cmd;
- field_data = "";
-
- if (*field == '{') {
- field++;
- if ((e = strchr(field, '}'))) {
- *e = '\0';
- field_data = switch_channel_get_variable(channel, field);
- }
+ if (strchr(field, '$')) {
+ if ((field_expanded = switch_channel_expand_variables(channel, field)) == field) {
+ field_expanded = NULL;
+ field_data = field;
} else {
- switch_safe_free(stream.data);
- memset(&stream, 0, sizeof(stream));
- SWITCH_STANDARD_STREAM(stream);
-
- if ((arg = strchr(cmd, '('))) {
- *arg++ = '\0';
- if ((e = strchr(arg, ')'))) {
- *e = '\0';
- if (switch_api_execute(cmd, arg, session, &stream) == SWITCH_STATUS_SUCCESS) {
- field_data = stream.data;
- }
- }
- }
+ field_data = field_expanded;
}
} else {
field_data = switch_caller_get_field_by_name(caller_profile, field);
@@ -183,7 +173,8 @@
}
done:
- switch_safe_free(stream.data);
+ switch_safe_free(field_expanded);
+ switch_safe_free(expression_expanded);
return proceed;
}
Modified: freeswitch/trunk/src/switch_channel.c
==============================================================================
--- freeswitch/trunk/src/switch_channel.c (original)
+++ freeswitch/trunk/src/switch_channel.c Wed Oct 17 14:26:08 2007
@@ -1295,9 +1295,13 @@
}
if (*p == '$' && !nv) {
- vtype = 1;
- if (*(p + 1) != '{') {
- vtype = 2;
+ if (*(p+1)) {
+ vtype = 1;
+ if (*(p + 1) != '{') {
+ vtype = 2;
+ }
+ } else {
+ nv = 1;
}
}
More information about the Freeswitch-svn
mailing list