/*
* The pathname is always going to be /groupdav/room_name/msg_num
*/
-void groupdav_options(void)
+void dav_options(void)
{
wcsession *WCC = WC;
StrBuf *dav_roomname;
StrBufExtract_token(dav_uid, WCC->Hdr->HR.ReqLine, 1, '/');
/*
- * If the room name is blank, the client is doing a top-level OPTIONS.
+ * If the room name is blank, the client is doing an OPTIONS on the root.
*/
if (StrLength(dav_roomname) == 0) {
hprintf("HTTP/1.1 200 OK\r\n");
- groupdav_common_headers();
+ dav_common_headers();
hprintf("Date: %s\r\n", datestring);
hprintf("DAV: 1\r\n");
hprintf("Allow: OPTIONS, PROPFIND\r\n");
if (strcasecmp(ChrPtr(WC->CurRoom.name), ChrPtr(dav_roomname))) {
hprintf("HTTP/1.1 404 not found\r\n");
- groupdav_common_headers();
+ dav_common_headers();
hprintf("Date: %s\r\n", datestring);
hprintf(
"Content-Type: text/plain\r\n");
* a specific item in the room.
*/
if (StrLength(dav_uid) != 0) {
-
dav_msgnum = locate_message_by_uid(ChrPtr(dav_uid));
if (dav_msgnum < 0) {
hprintf("HTTP/1.1 404 not found\r\n");
- groupdav_common_headers();
+ dav_common_headers();
hprintf("Content-Type: text/plain\r\n");
begin_burst();
wc_printf(
}
hprintf("HTTP/1.1 200 OK\r\n");
- groupdav_common_headers();
+ dav_common_headers();
hprintf("Date: %s\r\n", datestring);
hprintf("DAV: 1\r\n");
hprintf("Allow: OPTIONS, PROPFIND, GET, PUT, DELETE\r\n");
* an OPTIONS on the room itself.
*/
hprintf("HTTP/1.1 200 OK\r\n");
- groupdav_common_headers();
+ dav_common_headers();
hprintf("Date: %s\r\n", datestring);
- hprintf("DAV: 1\r\n");
+
+ /*
+ * Offer CalDAV (RFC 4791) if this is a calendar room
+ */
+ if ( (WC->CurRoom.view == VIEW_CALENDAR) || (WC->CurRoom.view == VIEW_CALBRIEF) ) {
+ hprintf("DAV: 1, calendar-access\r\n");
+ }
+ else {
+ hprintf("DAV: 1\r\n");
+ }
+
hprintf("Allow: OPTIONS, PROPFIND, GET, PUT\r\n");
begin_burst();
wc_printf("\r\n");