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 wprintf("HTTP/1.1 200 OK\r\n");
33 groupdav_common_headers();
34 wprintf("Date: %s\r\n", datestring);
35 wprintf("DAV: 1\r\n");
36 wprintf("Allow: OPTIONS, PROPFIND\r\n");
41 /* Go to the correct room. */
42 if (strcasecmp(WC->wc_roomname, dav_roomname)) {
43 gotoroom(dav_roomname);
46 if (strcasecmp(WC->wc_roomname, dav_roomname)) {
47 wprintf("HTTP/1.1 404 not found\r\n");
48 groupdav_common_headers();
49 wprintf("Date: %s\r\n", datestring);
51 "Content-Type: text/plain\r\n"
53 "There is no folder called \"%s\" on this server.\r\n",
59 /* If dav_uid is non-empty, client is requesting an OPTIONS on
60 * a specific item in the room.
62 if (!IsEmptyStr(dav_uid)) {
64 dav_msgnum = locate_message_by_uid(dav_uid);
66 wprintf("HTTP/1.1 404 not found\r\n");
67 groupdav_common_headers();
69 "Content-Type: text/plain\r\n"
71 "Object \"%s\" was not found in the \"%s\" folder.\r\n",
78 wprintf("HTTP/1.1 200 OK\r\n");
79 groupdav_common_headers();
80 wprintf("Date: %s\r\n", datestring);
81 wprintf("DAV: 1\r\n");
82 wprintf("Allow: OPTIONS, PROPFIND, GET, PUT, DELETE\r\n");
88 * We got to this point, which means that the client is requesting
89 * an OPTIONS on the room itself.
91 wprintf("HTTP/1.1 200 OK\r\n");
92 groupdav_common_headers();
93 wprintf("Date: %s\r\n", datestring);
94 wprintf("DAV: 1\r\n");
95 wprintf("Allow: OPTIONS, PROPFIND, GET, PUT\r\n");