From b82cf5683b1d8fddbe4084a413a1a9041fa67fe7 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 15 Feb 2007 19:20:14 +0000 Subject: [PATCH] xml formatting for call detail git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4289 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_ivr.c | 21 +++++++++++++-------- src/switch_xml.c | 15 ++++++++++----- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 2701b3d40b..347628c6d8 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -4921,6 +4921,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_generate_xml_cdr(switch_core_session_ x_caller_profile, x_caller_extension, x_times, + time_tag, x_application, x_callflow; char tmp[512]; @@ -5004,29 +5005,33 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_generate_xml_cdr(switch_core_session_ if (caller_profile->times) { - if (!(x_times = switch_xml_add_child_d(x_callflow, "created_time", cf_off++))) { + int t_off = 0; + if (!(x_times = switch_xml_add_child_d(x_callflow, "times", cf_off++))) { + goto error; + } + if (!(time_tag = switch_xml_add_child_d(x_times, "created_time", t_off++))) { goto error; } snprintf(tmp, sizeof(tmp), "%"APR_TIME_T_FMT, caller_profile->times->created); - switch_xml_set_txt_d(x_times, tmp); + switch_xml_set_txt_d(time_tag, tmp); - if (!(x_times = switch_xml_add_child_d(x_callflow, "answered_time", cf_off++))) { + if (!(time_tag = switch_xml_add_child_d(x_times, "answered_time", t_off++))) { goto error; } snprintf(tmp, sizeof(tmp), "%"APR_TIME_T_FMT, caller_profile->times->answered); - switch_xml_set_txt_d(x_times, tmp); + switch_xml_set_txt_d(time_tag, tmp); - if (!(x_times = switch_xml_add_child_d(x_callflow, "hangup_time", cf_off++))) { + if (!(time_tag = switch_xml_add_child_d(x_times, "hangup_time", t_off++))) { goto error; } snprintf(tmp, sizeof(tmp), "%"APR_TIME_T_FMT, caller_profile->times->hungup); - switch_xml_set_txt_d(x_times, tmp); + switch_xml_set_txt_d(time_tag, tmp); - if (!(x_times = switch_xml_add_child_d(x_callflow, "transfer_time", cf_off++))) { + if (!(time_tag = switch_xml_add_child_d(x_times, "transfer_time", t_off++))) { goto error; } snprintf(tmp, sizeof(tmp), "%"APR_TIME_T_FMT, caller_profile->times->transferred); - switch_xml_set_txt_d(x_times, tmp); + switch_xml_set_txt_d(time_tag, tmp); } caller_profile = caller_profile->next; diff --git a/src/switch_xml.c b/src/switch_xml.c index 3030070064..5169379028 100644 --- a/src/switch_xml.c +++ b/src/switch_xml.c @@ -1223,9 +1223,12 @@ static char *switch_xml_toxml_r(switch_xml_t xml, char **s, switch_size_t *len, // parent character content up to this tag *s = switch_xml_ampencode(txt + start, xml->off - start, s, len, max, 0); - while (*len + strlen(xml->name) + 5 + (strlen(XML_INDENT) * (*count)) > *max) // reallocate s + while (*len + strlen(xml->name) + 5 + (strlen(XML_INDENT) * (*count)) + 1 > *max) // reallocate s *s = realloc(*s, *max += SWITCH_XML_BUFSIZE); + if (*(*s+(*len)-1) == '>') { + *len += sprintf(*s + *len, "\n"); // indent + } for (lcount = 0; lcount < *count; lcount++) { *len += sprintf(*s + *len, "%s", XML_INDENT); // indent } @@ -1253,7 +1256,7 @@ static char *switch_xml_toxml_r(switch_xml_t xml, char **s, switch_size_t *len, *len += sprintf(*s + *len, "\""); } - *len += sprintf(*s + *len, (xml->child || xml->txt) ? ">" : "/>\n"); + *len += sprintf(*s + *len, (xml->child || xml->txt) ? ">" : "/>\n"); if (xml->child) { (*count)++; @@ -1268,9 +1271,11 @@ static char *switch_xml_toxml_r(switch_xml_t xml, char **s, switch_size_t *len, if (xml->child || xml->txt) { - //for (lcount = 0; lcount < *count; lcount++) { - //*len += sprintf(*s + *len, "%s", XML_INDENT); // indent - //} + if (*(*s+(*len)-1) == '\n') { + for (lcount = 0; lcount < *count; lcount++) { + *len += sprintf(*s + *len, "%s", XML_INDENT); // indent + } + } *len += sprintf(*s + (*len), "\n", xml->name); // close tag }