4 * Handles DAV OPTIONS requests (experimental -- not required by GroupDAV)
13 * The pathname is always going to be /groupdav/room_name/msg_num
15 void groupdav_options(char *dav_pathname) {
16 char dav_roomname[256];
18 long dav_msgnum = (-1);
23 http_datestring(datestring, sizeof datestring, now);
25 extract_token(dav_roomname, dav_pathname, 2, '/', sizeof dav_roomname);
26 extract_token(dav_uid, dav_pathname, 3, '/', sizeof dav_uid);
29 * If the room name is blank, the client is doing a top-level OPTIONS.
31 if (IsEmptyStr(dav_roomname)) {
32 hprintf("HTTP/1.1 200 OK\r\n");
33 groupdav_common_headers();
34 hprintf("Date: %s\r\n", datestring);
35 hprintf("DAV: 1\r\n");
36 hprintf("Allow: OPTIONS, PROPFIND\r\n");
43 /* Go to the correct room. */
44 if (strcasecmp(WC->wc_roomname, dav_roomname)) {
45 gotoroom(dav_roomname);
48 if (strcasecmp(WC->wc_roomname, dav_roomname)) {
49 hprintf("HTTP/1.1 404 not found\r\n");
50 groupdav_common_headers();
51 hprintf("Date: %s\r\n", datestring);
53 "Content-Type: text/plain\r\n"
55 "There is no folder called \"%s\" on this server.\r\n",
63 /* If dav_uid is non-empty, client is requesting an OPTIONS on
64 * a specific item in the room.
66 if (!IsEmptyStr(dav_uid)) {
68 dav_msgnum = locate_message_by_uid(dav_uid);
70 hprintf("HTTP/1.1 404 not found\r\n");
71 groupdav_common_headers();
73 "Content-Type: text/plain\r\n"
75 "Object \"%s\" was not found in the \"%s\" folder.\r\n",
79 begin_burst();end_burst();return;
82 hprintf("HTTP/1.1 200 OK\r\n");
83 groupdav_common_headers();
84 hprintf("Date: %s\r\n", datestring);
85 hprintf("DAV: 1\r\n");
86 hprintf("Allow: OPTIONS, PROPFIND, GET, PUT, DELETE\r\n");
94 * We got to this point, which means that the client is requesting
95 * an OPTIONS on the room itself.
97 hprintf("HTTP/1.1 200 OK\r\n");
98 groupdav_common_headers();
99 hprintf("Date: %s\r\n", datestring);
100 hprintf("DAV: 1\r\n");
101 hprintf("Allow: OPTIONS, PROPFIND, GET, PUT\r\n");