projects
/
citadel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ab43dc8
)
I wish much death and suffering to Cyrus Daboo, Lisa M. Dusseault, and Bernard Desrui...
author
Art Cancro
<ajc@citadel.org>
Wed, 21 Feb 2024 05:08:57 +0000
(
00:08
-0500)
committer
Art Cancro
<ajc@citadel.org>
Wed, 21 Feb 2024 05:08:57 +0000
(
00:08
-0500)
webcit-ng/server/caldav_reports.c
patch
|
blob
|
history
diff --git
a/webcit-ng/server/caldav_reports.c
b/webcit-ng/server/caldav_reports.c
index 9c0fe32a004d8bdd987e372e02de4f2d9adf53bf..31fe712bacf66662156fbe47c7c95b9cba5c0b16 100644
(file)
--- a/
webcit-ng/server/caldav_reports.c
+++ b/
webcit-ng/server/caldav_reports.c
@@
-25,6
+25,7
@@
struct cr_params {
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
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
};
};
@@
-37,11
+38,13
@@
void caldav_xml_start(void *data, const char *el, const char **attr) {
int i;
char indent[256];
indent[0] = 0;
int i;
char indent[256];
indent[0] = 0;
-
l
or (i=0; i<crp->tag_nesting_level; ++i) {
+
f
or (i=0; i<crp->tag_nesting_level; ++i) {
strcat(indent, " ");
}
syslog(LOG_DEBUG, "%s<%s>", indent, el);
strcat(indent, " ");
}
syslog(LOG_DEBUG, "%s<%s>", indent, el);
+#endif
++crp->tag_nesting_level;
++crp->tag_nesting_level;
+#ifdef DEBUG_XML_PARSE
indent[0] = 0;
for (i=0; i<crp->tag_nesting_level; ++i) {
strcat(indent, " ");
indent[0] = 0;
for (i=0; i<crp->tag_nesting_level; ++i) {
strcat(indent, " ");
@@
-70,6
+73,7
@@
void caldav_xml_start(void *data, const char *el, const char **attr) {
// 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);
// 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
}
// Handle the filters defined in RFC4791 9.7.1 through 9.7.5
@@
-81,9
+85,11
@@
void caldav_xml_start(void *data, const char *el, const char **attr) {
)
&& (crp->filters) // Make sure we actually allocated an array
) {
)
&& (crp->filters) // Make sure we actually allocated an array
) {
+
char newfilter[SIZ];
int a = 0;
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
}
while (attr[a]) {
len += snprintf(&newfilter[len], SIZ-len, "|%s", attr[a++]); // now save the attributes
}
@@
-293,7
+299,7
@@
int caldav_apply_one_filter(void *cal, char *filter) {
// Handle the individual filters defined in RFC4791 9.7.1 through 9.7.5
// 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");
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");
@@
-303,19
+309,19
@@
int caldav_apply_one_filter(void *cal, char *filter) {
}
}
}
}
- 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");
}
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");
}
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");
}
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");
}
syslog(LOG_DEBUG, "text match filter FIXME not implemented yet");
}