X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fgroupdav_options.c;h=5f678c1e647b6e2485f44d8ad51ef276c2f0bab7;hb=808f3be91dd6b6677e380695e2f16e6473141a7e;hp=929a9c843ef0064d6fa49f68970f4a3e48a82630;hpb=aa8ca3b0af3efdabd8559b886efb3164319bdce1;p=citadel.git diff --git a/webcit/groupdav_options.c b/webcit/groupdav_options.c index 929a9c843..5f678c1e6 100644 --- a/webcit/groupdav_options.c +++ b/webcit/groupdav_options.c @@ -12,9 +12,9 @@ /* * The pathname is always going to be /groupdav/room_name/msg_num */ -void groupdav_options(char *dav_pathname) { - char dav_roomname[256]; - char dav_uid[256]; +void groupdav_options(StrBuf *dav_pathname) { + StrBuf *dav_roomname; + StrBuf *dav_uid; long dav_msgnum = (-1); char datestring[256]; time_t now; @@ -22,73 +22,97 @@ void groupdav_options(char *dav_pathname) { now = time(NULL); http_datestring(datestring, sizeof datestring, now); - extract_token(dav_roomname, dav_pathname, 2, '/', sizeof dav_roomname); - extract_token(dav_uid, dav_pathname, 3, '/', sizeof dav_uid); + dav_roomname = NewStrBuf(); + dav_uid = NewStrBuf(); + StrBufExtract_token(dav_roomname, dav_pathname, 2, '/'); + StrBufExtract_token(dav_uid, dav_pathname, 3, '/'); /* * If the room name is blank, the client is doing a top-level OPTIONS. */ - if (strlen(dav_roomname) == 0) { - wprintf("HTTP/1.1 200 OK\r\n"); + if (StrLength(dav_roomname) == 0) { + hprintf("HTTP/1.1 200 OK\r\n"); groupdav_common_headers(); - wprintf("Date: %s\r\n", datestring); - wprintf("Allow: OPTIONS, PROPFIND\r\n"); - wprintf("\r\n"); + hprintf("Date: %s\r\n", datestring); + hprintf("DAV: 1\r\n"); + hprintf("Allow: OPTIONS, PROPFIND\r\n"); + hprintf("\r\n"); + begin_burst(); + end_burst(); + FreeStrBuf(&dav_roomname); + FreeStrBuf(&dav_uid); return; } /* Go to the correct room. */ - if (strcasecmp(WC->wc_roomname, dav_roomname)) { + if (strcasecmp(ChrPtr(WC->wc_roomname), ChrPtr(dav_roomname))) { gotoroom(dav_roomname); } - if (strcasecmp(WC->wc_roomname, dav_roomname)) { - wprintf("HTTP/1.1 404 not found\r\n"); + + if (strcasecmp(ChrPtr(WC->wc_roomname), ChrPtr(dav_roomname))) { + hprintf("HTTP/1.1 404 not found\r\n"); groupdav_common_headers(); - wprintf("Date: %s\r\n", datestring); - wprintf( + hprintf("Date: %s\r\n", datestring); + hprintf( "Content-Type: text/plain\r\n" "\r\n" "There is no folder called \"%s\" on this server.\r\n", - dav_roomname + ChrPtr(dav_roomname) ); + begin_burst(); + end_burst(); + FreeStrBuf(&dav_roomname); + FreeStrBuf(&dav_uid); return; } /* If dav_uid is non-empty, client is requesting an OPTIONS on * a specific item in the room. */ - if (strlen(dav_uid) > 0) { + if (StrLength(dav_uid) != 0) { - dav_msgnum = locate_message_by_uid(dav_uid); + dav_msgnum = locate_message_by_uid(ChrPtr(dav_uid)); if (dav_msgnum < 0) { - wprintf("HTTP/1.1 404 not found\r\n"); + hprintf("HTTP/1.1 404 not found\r\n"); groupdav_common_headers(); - wprintf( + hprintf( "Content-Type: text/plain\r\n" "\r\n" "Object \"%s\" was not found in the \"%s\" folder.\r\n", - dav_uid, - dav_roomname + ChrPtr(dav_uid), + ChrPtr(dav_roomname) ); - return; + FreeStrBuf(&dav_roomname); + FreeStrBuf(&dav_uid); + begin_burst();end_burst();return; } - wprintf("HTTP/1.1 200 OK\r\n"); + hprintf("HTTP/1.1 200 OK\r\n"); groupdav_common_headers(); - wprintf("Date: %s\r\n", datestring); - wprintf("Allow: OPTIONS, PROPFIND, GET, PUT, DELETE\r\n"); - wprintf("\r\n"); + hprintf("Date: %s\r\n", datestring); + hprintf("DAV: 1\r\n"); + hprintf("Allow: OPTIONS, PROPFIND, GET, PUT, DELETE\r\n"); + hprintf("\r\n"); + begin_burst(); + end_burst(); + FreeStrBuf(&dav_roomname); + FreeStrBuf(&dav_uid); return; } + FreeStrBuf(&dav_roomname); + FreeStrBuf(&dav_uid); /* * We got to this point, which means that the client is requesting * an OPTIONS on the room itself. */ - wprintf("HTTP/1.1 200 OK\r\n"); + hprintf("HTTP/1.1 200 OK\r\n"); groupdav_common_headers(); - wprintf("Date: %s\r\n", datestring); - wprintf("Allow: OPTIONS, PROPFIND, GET, PUT\r\n"); - wprintf("\r\n"); + hprintf("Date: %s\r\n", datestring); + hprintf("DAV: 1\r\n"); + hprintf("Allow: OPTIONS, PROPFIND, GET, PUT\r\n"); + hprintf("\r\n"); + begin_burst(); + end_burst(); }