X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fdav_options.c;h=250a3ce124b0453dac338e87d0f7fc6acef1cb6b;hb=efccdcf4db04e63bfa3512c80215357ee9ffd98f;hp=b5f35abbc9b1281c31fd60a8bf6b8094b251c762;hpb=8c2d12e026dd60a3fa22112e739880b402f2b3f4;p=citadel.git diff --git a/webcit/dav_options.c b/webcit/dav_options.c index b5f35abbc..250a3ce12 100644 --- a/webcit/dav_options.c +++ b/webcit/dav_options.c @@ -1,7 +1,7 @@ /* * Handles DAV OPTIONS requests (experimental -- not required by GroupDAV) * - * Copyright (c) 2005-2010 by the citadel.org team + * Copyright (c) 2005-2012 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,10 +42,12 @@ void dav_options(void) StrBufExtract_token(dav_roomname, WCC->Hdr->HR.ReqLine, 0, '/'); StrBufExtract_token(dav_uid, WCC->Hdr->HR.ReqLine, 1, '/'); + syslog(LOG_DEBUG, "\033[35m%s (logged_in=%d)\033[0m", ChrPtr(WCC->Hdr->HR.ReqLine), WC->logged_in); /* - * 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) { + syslog(LOG_DEBUG, "\033[36mOPTIONS requested for root\033[0m"); hprintf("HTTP/1.1 200 OK\r\n"); dav_common_headers(); hprintf("Date: %s\r\n", datestring); @@ -65,6 +67,7 @@ void dav_options(void) } if (strcasecmp(ChrPtr(WC->CurRoom.name), ChrPtr(dav_roomname))) { + syslog(LOG_DEBUG, "\033[36mOPTIONS requested for invalid item\033[0m"); hprintf("HTTP/1.1 404 not found\r\n"); dav_common_headers(); hprintf("Date: %s\r\n", datestring); @@ -85,7 +88,7 @@ void dav_options(void) * a specific item in the room. */ if (StrLength(dav_uid) != 0) { - + syslog(LOG_DEBUG, "\033[36mOPTIONS requested for specific item\033[0m"); dav_msgnum = locate_message_by_uid(ChrPtr(dav_uid)); if (dav_msgnum < 0) { hprintf("HTTP/1.1 404 not found\r\n"); @@ -122,12 +125,27 @@ void dav_options(void) * We got to this point, which means that the client is requesting * an OPTIONS on the room itself. */ + syslog(LOG_DEBUG, "\033[36mOPTIONS requested for room '%s' (%slogged in)\033[0m", + ChrPtr(WC->CurRoom.name), + ((WC->logged_in) ? "" : "not ") + ); hprintf("HTTP/1.1 200 OK\r\n"); dav_common_headers(); hprintf("Date: %s\r\n", datestring); - hprintf("DAV: 1\r\n"); - hprintf("Allow: OPTIONS, PROPFIND, GET, PUT\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"); + syslog(LOG_DEBUG, "\033[36mDAV: 1, calendar-access\033[0m"); + } + else { + hprintf("DAV: 1\r\n"); + syslog(LOG_DEBUG, "\033[36mDAV: 1\033[0m"); + } + + hprintf("Allow: OPTIONS, PROPFIND, GET, PUT, REPORT\r\n"); begin_burst(); - wc_printf("\r\n"); end_burst(); }