]> code.citadel.org Git - citadel.git/blobdiff - webcit-ng/server/caldav_reports.c
Final changes to XML parser trace logging.
[citadel.git] / webcit-ng / server / caldav_reports.c
index e6a13cef009f3e0eaff57442ea878221d6ff9433..5883c73470bc7d1d306854e9aea75951ab7b478b 100644 (file)
@@ -34,9 +34,14 @@ void caldav_xml_start(void *data, const char *el, const char **attr) {
        char indent[256];
        indent[0] = 0;
        for (i=0; i<crp->tag_nesting_level; ++i) {
-               strcat(indent, "  ");
+               strcat(indent, "··");
        }
        syslog(LOG_DEBUG, "%s<%s>", indent, el);
+       ++crp->tag_nesting_level;
+       indent[0] = 0;
+       for (i=0; i<crp->tag_nesting_level; ++i) {
+               strcat(indent, "··");
+       }
        for (i = 0; attr[i] != NULL; i += 2) {
                syslog(LOG_DEBUG, "%sAttribute '%s' = '%s'", indent, attr[i], attr[i + 1]);
        }
@@ -58,7 +63,6 @@ void caldav_xml_start(void *data, const char *el, const char **attr) {
                crp->report_type = cr_freebusy_query;
        }
 
-       ++crp->tag_nesting_level;
 }
 
 
@@ -74,10 +78,7 @@ void caldav_xml_end(void *data, const char *el) {
        char indent[256];
        indent[0] = 0;
        for (i=0; i<crp->tag_nesting_level; ++i) {
-               strcat(indent, "  ");
-       }
-       if (crp->Chardata != NULL) {
-               syslog(LOG_DEBUG, "%sCHARDATA: '%s'", indent, ChrPtr(crp->Chardata));
+               strcat(indent, "··");
        }
        syslog(LOG_DEBUG, "%s</%s>", indent, el);
        // end logging
@@ -101,15 +102,38 @@ void caldav_xml_end(void *data, const char *el) {
 
 
 // XML parser callback
-void caldav_xml_chardata(void *data, const XML_Char * s, int len) {
+void caldav_xml_chardata(void *data, const XML_Char *s, int len) {
        struct cr_parms *crp = (struct cr_parms *) data;
 
+       char *app = malloc(len+1);
+       if (!app) {
+               return;
+       }
+       memcpy(app, s, len);
+       app[len] = 0;
+
        if (crp->Chardata == NULL) {
                crp->Chardata = NewStrBuf();
        }
 
-       StrBufAppendBufPlain(crp->Chardata, s, len, 0);
+       StrBufAppendBufPlain(crp->Chardata, app, len, 0);
+
+#ifdef DEBUG_XML_PARSE
+       // logging
+       string_trim(app);               // remove leading/trailing whitespace.  ok to mangle it because we've already appended.
+       if (!IsEmptyStr(app)) {
+               int i;
+               char indent[256];
+               indent[0] = 0;
+               for (i=0; i<crp->tag_nesting_level; ++i) {
+                       strcat(indent, "··");
+               }
+               syslog(LOG_DEBUG, "%s%s", indent, app, len);
+       }
+       // end logging
+#endif
 
+       free(app);
        return;
 }