[Freeswitch-svn] [commit] r14024 - freeswitch/trunk/contrib/ledr/mod_xml_odbc
FreeSWITCH SVN
ledr at freeswitch.org
Sun Jun 28 13:13:12 PDT 2009
Author: ledr
Date: Sun Jun 28 15:13:11 2009
New Revision: 14024
Log:
tried freeing memory at certain places but it doesn't work, added comments, hopefully someone can help ?
Modified:
freeswitch/trunk/contrib/ledr/mod_xml_odbc/mod_xml_odbc.c
Modified: freeswitch/trunk/contrib/ledr/mod_xml_odbc/mod_xml_odbc.c
==============================================================================
--- freeswitch/trunk/contrib/ledr/mod_xml_odbc/mod_xml_odbc.c (original)
+++ freeswitch/trunk/contrib/ledr/mod_xml_odbc/mod_xml_odbc.c Sun Jun 28 15:13:11 2009
@@ -144,15 +144,17 @@
switch_xml_t xml_in_tmp = NULL;
int i;
+ char *name = NULL;
+ char *value = NULL, *new_value = NULL;
+ char *empty_result_break_to = NULL;
+ char *no_template_break_to = NULL;
+
xml_odbc_query_helper_t query_helper;
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
/* special case xml-odbc-do - this tag is not copied, but action is done */
if (!strcasecmp(xml_in->name, "xml-odbc-do")) {
- char *name = NULL;
- char *value = NULL, *new_value = NULL;
- char *empty_result_break_to = NULL;
- char *no_template_break_to = NULL;
-
name = (char *) switch_xml_attr_soft(xml_in, "name");
value = (char *) switch_xml_attr_soft(xml_in, "value");
empty_result_break_to = (char *) switch_xml_attr_soft(xml_in, "on-empty-result-break-to");
@@ -171,10 +173,11 @@
new_value = switch_event_expand_headers(params, value);
if (!strcasecmp(name, "break-to")) {
-/* have a look at this again, not too happy about this next_template_name thing.. */
+ /* set a next_template header so xml_odbc_render_template breaks the loop and starts over with a new template */
switch_event_del_header(params, "next_template_name");
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "next_template_name", value);
- return SWITCH_STATUS_FALSE;
+ goto done;
+
} else if (!strcasecmp(name, "query")) {
query_helper.xml_in = xml_in;
query_helper.xml_out = xml_out;
@@ -186,10 +189,10 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error running this query: [%s]\n", new_value);
} else {
if (!switch_strlen_zero(empty_result_break_to) && query_helper.rowcount == 0) {
-/* have a look at this again, not too happy about this next_template_name thing.. */
+ /* set a next_template header so xml_odbc_render_template breaks the loop and starts over with a new template */
switch_event_del_header(params, "next_template_name");
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "next_template_name", empty_result_break_to);
- return SWITCH_STATUS_FALSE;
+ goto done;
}
}
@@ -197,8 +200,6 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Ignoring unknown xml-odbc-do name=[%s]\n", name);
}
- switch_safe_free(new_value);
-
/* just copy current tag xml_in to xml_out and recurse for all children */
} else {
@@ -208,7 +209,7 @@
/* or create a child */
} else if (!(xml_out = switch_xml_add_child_d(xml_out, xml_in->name, *off++))) {
- return SWITCH_STATUS_FALSE;
+ goto done;
}
/* copy all attrs */
@@ -221,14 +222,23 @@
/* copy all children and render them */
for (xml_in_tmp = xml_in->child; xml_in_tmp; xml_in_tmp = xml_in_tmp->ordered) {
if (xml_odbc_render_tag(xml_in_tmp, params, xml_out, off) != SWITCH_STATUS_SUCCESS) {
- return SWITCH_STATUS_FALSE;
+ goto done;
}
}
}
+ status = SWITCH_STATUS_SUCCESS;
+
done:
- return SWITCH_STATUS_SUCCESS;
+/* what must I free here : */
+// switch_xml_free(xml_in_tmp);
+// switch_safe_free(name);
+// switch_safe_free(value);
+// switch_safe_free(new_value);
+// switch_safe_free(empty_result_break_to);
+// switch_safe_free(no_template_break_to);
+ return status;
}
@@ -253,9 +263,14 @@
next_template_name = "not_found";
rewind:
-/* have a look at this again, not too happy about this next_template_name thing.. */
+ /* remove next_template_name header from event so xml_odbc_render_template won't go into an infinite loop */
switch_event_del_header(params, "next_template_name");
+
+ /* reset xml_out */
xml_out->name = "";
+// switch_xml_free(xml_out); // THIS DOESN'T WORK EITHER
+// xml_out = switch_xml_new("");
+
xml_odbc_render_template(next_template_name, params, xml_out, off);
done:
More information about the Freeswitch-svn
mailing list