StrBuf *Chardata; // XML chardata in between tags is built up here
StrBuf *Hrefs; // list of items requested by a `calendar-multiget` REPORT
Array *filters; // If the query contains a FILTER stanza, the filter criteria are populated here
+ int filter_nest; // tag nesting level where a FILTER stanza begins
};
int i;
char indent[256];
indent[0] = 0;
- lor (i=0; i<crp->tag_nesting_level; ++i) {
+ for (i=0; i<crp->tag_nesting_level; ++i) {
strcat(indent, " ");
}
syslog(LOG_DEBUG, "%s<%s>", indent, el);
+#endif
++crp->tag_nesting_level;
+#ifdef DEBUG_XML_PARSE
indent[0] = 0;
for (i=0; i<crp->tag_nesting_level; ++i) {
strcat(indent, " ");
// RFC4791 9.7 create a filter array if this query contains a "filter" stanza
else if (!strcasecmp(el, CAL"filter")) {
crp->filters = array_new(SIZ);
+ crp->filter_nest = crp->tag_nesting_level;
}
// Handle the filters defined in RFC4791 9.7.1 through 9.7.5
)
&& (crp->filters) // Make sure we actually allocated an array
) {
+
char newfilter[SIZ];
int a = 0;
- int len = snprintf(newfilter, SIZ, &el[CALLEN]); // strip off the namespace for our purposes
+ int len = snprintf(newfilter, SIZ, "%d|", crp->tag_nesting_level - crp->filter_nest - 1);
+ len += snprintf(&newfilter[len], SIZ-len, "%s", &el[CALLEN]); // filter name without the namespace
while (attr[a]) {
len += snprintf(&newfilter[len], SIZ-len, "|%s", attr[a++]); // now save the attributes
}
// Handle the individual filters defined in RFC4791 9.7.1 through 9.7.5
- if (!strcasecmp(t[0], "comp-filter")) { // RFC4791 9.7.1 - filter by component
+ if (!strcasecmp(t[1], "comp-filter")) { // RFC4791 9.7.1 - filter by component
syslog(LOG_DEBUG, "component filter FIXME not implemented yet");
if (icalcomponent_isa_component(cal)) {
syslog(LOG_DEBUG, "\033[32m yes this is a component \033[0m");
}
}
- else if (!strcasecmp(t[0], "prop-filter")) { // RFC4791 9.7.2 - filter by property
+ else if (!strcasecmp(t[1], "prop-filter")) { // RFC4791 9.7.2 - filter by property
syslog(LOG_DEBUG, "property filter FIXME not implemented yet");
}
- else if (!strcasecmp(t[0], "param-filter")) { // RFC4791 9.7.3 - filter by parameter
+ else if (!strcasecmp(t[1], "param-filter")) { // RFC4791 9.7.3 - filter by parameter
syslog(LOG_DEBUG, "parameter filter FIXME not implemented yet");
}
- else if (!strcasecmp(t[0], "is-not-defined")) { // RFC4791 9.7.4
+ else if (!strcasecmp(t[1], "is-not-defined")) { // RFC4791 9.7.4
syslog(LOG_DEBUG, "is-not-defined filter FIXME not implemented yet");
}
- else if (!strcasecmp(t[0], "text-match")) { // RFC4791 9.7.5
+ else if (!strcasecmp(t[1], "text-match")) { // RFC4791 9.7.5
syslog(LOG_DEBUG, "text match filter FIXME not implemented yet");
}