From: Art Cancro Date: Mon, 8 Jan 2024 21:29:16 +0000 (-0500) Subject: Experimenting with the code layout for calendar report handling. X-Git-Tag: v997~20 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=734faf57dea0bd45b092f8356a6183587168bc3f Experimenting with the code layout for calendar report handling. The goal is to provide calendar searches (date range etc) for both WebCit-NG and for CALDAV REPORT method in a DRY way. --- diff --git a/citadel/server/modules/calendar/calendar_report.c b/citadel/server/modules/calendar/calendar_report.c new file mode 100644 index 000000000..1ffe3edfc --- /dev/null +++ b/citadel/server/modules/calendar/calendar_report.c @@ -0,0 +1,39 @@ +// This is a handler for calendar "report" operations. +// It is expected that CALDAV REPORT operations should be able to use this directly. +// +// Copyright (c) 1987-2024 by the citadel.org team +// +// This program is open source software. Use, duplication, or disclosure +// are subject to the terms of the GNU General Public License version 3. + +#define PRODID "-//Citadel//NONSGML Citadel Calendar//EN" + +#include "../../ctdl_module.h" +#include +#include "../../msgbase.h" +#include "../../internet_addressing.h" +#include "serv_calendar.h" +#include "../../room_ops.h" +#include "../../euidindex.h" +#include "../../default_timezone.h" +#include "../../config.h" + + +void calendar_report(void) { + char buf[SIZ]; + + // Only allow this operation if we're in a room containing a calendar or tasks view + if ( (CC->room.QRdefaultview != VIEW_CALENDAR) + && (CC->room.QRdefaultview != VIEW_TASKS) + ) { + cprintf("%d Not a calendar room\n", ERROR+NOT_HERE); + return; // This room does not contain a calendar. + } + + cprintf("%d Send query then receive response\n", SEND_THEN_RECV); + while(client_getln(buf, sizeof buf) >= 0 && strcmp(buf,"000")) { + } + cprintf("000\n"); +} + + diff --git a/citadel/server/modules/calendar/serv_calendar.c b/citadel/server/modules/calendar/serv_calendar.c index 2569fb5dd..ac9d74465 100644 --- a/citadel/server/modules/calendar/serv_calendar.c +++ b/citadel/server/modules/calendar/serv_calendar.c @@ -2327,27 +2327,6 @@ void ical_fixed_output(char *ptr, int len) { } -// This is an experimental implementation of CALDAV REPORT operations (RFC 4791 section 7) -// fundamentally handled in the Citadel Server. A web implementation should be able to just -// change the encapsulation to HTTP with the data format unchanged. -void ical_report(void) { - char buf[SIZ]; - - // Only allow this operation if we're in a room containing a calendar or tasks view - if ( (CC->room.QRdefaultview != VIEW_CALENDAR) - && (CC->room.QRdefaultview != VIEW_TASKS) - ) { - cprintf("%d Not a calendar room\n", ERROR+NOT_HERE); - return; // This room does not contain a calendar. - } - - cprintf("%d Send query then receive response\n", SEND_THEN_RECV); - while(client_getln(buf, sizeof buf) >= 0 && strcmp(buf,"000")) { - } - cprintf("000\n"); -} - - // All Citadel calendar commands from the client come through here. void cmd_ical(char *argbuf) { char subcmd[64]; @@ -2381,7 +2360,7 @@ void cmd_ical(char *argbuf) { if (CtdlAccessCheck(ac_logged_in)) return; if (!strcasecmp(subcmd, "report")) { - ical_report(); + calendar_report(); return; } diff --git a/citadel/server/modules/calendar/serv_calendar.h b/citadel/server/modules/calendar/serv_calendar.h index 8f5a06e8e..93d6ee86e 100644 --- a/citadel/server/modules/calendar/serv_calendar.h +++ b/citadel/server/modules/calendar/serv_calendar.h @@ -20,3 +20,5 @@ struct cit_ical { #define CIT_ICAL CC->CIT_ICAL #define MAX_RECUR 1000 + +void calendar_report(void);