* groupdav_propfind.c: PROPFIND on a collection now utilizes
authorArt Cancro <ajc@citadel.org>
Tue, 21 Feb 2006 05:04:37 +0000 (05:04 +0000)
committerArt Cancro <ajc@citadel.org>
Tue, 21 Feb 2006 05:04:37 +0000 (05:04 +0000)
the 'DAV:' namespace as the default namespace instead of defining a prefix.
* groupdav_get.c: GET operations on a single object now make use of the
  begin_burst() and end_burst() wrappers, which will cause a proper Content-length:
  header to be output, and also allows compression to take place.

webcit/groupdav_get.c
webcit/groupdav_propfind.c
webcit/tcp_sockets.c

index 70f75bbd5ef04bf8d8079b734f8000fe13dc7174..aca7d96e6fa633be5b66472e0ee96c56e4449d31 100644 (file)
@@ -73,21 +73,23 @@ void groupdav_get(char *dav_pathname) {
        groupdav_common_headers();
        wprintf("etag: \"%ld\"\r\n", dav_msgnum);
        while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
-               if (!strncasecmp(buf, "Date: ", 6)) {
+               if (in_body) {
+                       wprintf("%s\r\n", buf);
+               }
+               else if (!strncasecmp(buf, "Date: ", 6)) {
                        wprintf("%s\r\n", buf);
                }
-               if (!strncasecmp(buf, "Content-type: ", 14)) {
+               else if (!strncasecmp(buf, "Content-type: ", 14)) {
                        wprintf("%s\r\n", buf);
                        found_content_type = 1;
                }
-               if ((strlen(buf) == 0) && (in_body == 0)) {
+               else if ((strlen(buf) == 0) && (in_body == 0)) {
                        if (!found_content_type) {
                                wprintf("Content-type: text/plain\r\n");
                        }
                        in_body = 1;
-               }
-               if (in_body) {
-                       wprintf("%s\r\n", buf);
+                       begin_burst();
                }
        }
+       end_burst();
 }
index c5f39890357b37ba42976b6c9c480a32eff74d07..2e4cf5cf8e4b837b6fa1aa9ff4c90e00a0b8fd35 100644 (file)
@@ -75,7 +75,7 @@ void groupdav_folder_list(void) {
        begin_burst();
 
        wprintf("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
-               "<D:multistatus xmlns:D=\"DAV:\" xmlns:G=\"http://groupdav.org/\">"
+               "<multistatus xmlns=\"DAV:\" xmlns:G=\"http://groupdav.org/\">"
        );
 
        serv_puts("LKRA");
@@ -94,21 +94,21 @@ void groupdav_folder_list(void) {
                   || (view == VIEW_TASKS)
                   || (view == VIEW_ADDRESSBOOK) ) {
 
-                       wprintf("<D:response>");
+                       wprintf("<response>");
 
-                       wprintf("<D:href>");
+                       wprintf("<href>");
                        groupdav_identify_host();
                        wprintf("/groupdav/");
                        urlescputs(roomname);
-                       wprintf("/</D:href>");
+                       wprintf("/</href>");
 
-                       wprintf("<D:propstat>");
-                       wprintf("<D:status>HTTP/1.1 200 OK</D:status>");
-                       wprintf("<D:prop>");
-                       wprintf("<D:displayname>");
+                       wprintf("<propstat>");
+                       wprintf("<status>HTTP/1.1 200 OK</status>");
+                       wprintf("<prop>");
+                       wprintf("<displayname>");
                        escputs(roomname);
-                       wprintf("</D:displayname>");
-                       wprintf("<D:resourcetype><D:collection/>");
+                       wprintf("</displayname>");
+                       wprintf("<resourcetype><collection/>");
 
                        switch(view) {
                                case VIEW_CALENDAR:
@@ -122,13 +122,13 @@ void groupdav_folder_list(void) {
                                        break;
                        }
 
-                       wprintf("</D:resourcetype>");
-                       wprintf("</D:prop>");
-                       wprintf("</D:propstat>");
-                       wprintf("</D:response>");
+                       wprintf("</resourcetype>");
+                       wprintf("</prop>");
+                       wprintf("</propstat>");
+                       wprintf("</response>");
                }
        }
-       wprintf("</D:multistatus>\n");
+       wprintf("</multistatus>\n");
 
        end_burst();
 }
@@ -223,25 +223,25 @@ void groupdav_propfind(char *dav_pathname, char *dav_depth, char *dav_content_ty
                begin_burst();
        
                wprintf("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
-                       "<D:multistatus xmlns:D=\"DAV:\" xmlns:G=\"http://groupdav.org/\">"
+                       "<multistatus xmlns=\"DAV:\">"
                );
 
-               wprintf("<D:response>");
+               wprintf("<response>");
 
-               wprintf("<D:href>");
+               wprintf("<href>");
                groupdav_identify_host();
                wprintf("/groupdav/");
                urlescputs(WC->wc_roomname);
                euid_escapize(encoded_uid, dav_uid);
                wprintf("/%s", encoded_uid);
-               wprintf("</D:href>");
-               wprintf("<D:propstat>");
-               wprintf("<D:status>HTTP/1.1 200 OK</D:status>");
-               wprintf("<D:prop><D:getetag>\"%ld\"</D:getetag></D:prop>", dav_msgnum);
-               wprintf("</D:propstat>");
-
-               wprintf("</D:response>\n");
-               wprintf("</D:multistatus>\n");
+               wprintf("</href>");
+               wprintf("<propstat>");
+               wprintf("<status>HTTP/1.1 200 OK</status>");
+               wprintf("<prop><getetag>\"%ld\"</getetag></prop>", dav_msgnum);
+               wprintf("</propstat>");
+
+               wprintf("</response>\n");
+               wprintf("</multistatus>\n");
                end_burst();
                return;
        }
@@ -264,7 +264,7 @@ void groupdav_propfind(char *dav_pathname, char *dav_depth, char *dav_content_ty
        begin_burst();
 
        wprintf("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
-               "<D:multistatus xmlns:D=\"DAV:\" xmlns:G=\"http://groupdav.org/\">"
+               "<multistatus xmlns=\"DAV:\" xmlns:G=\"http://groupdav.org/\">"
        );
 
        serv_puts("MSGS ALL");
@@ -286,23 +286,23 @@ void groupdav_propfind(char *dav_pathname, char *dav_depth, char *dav_content_ty
                }
 
                if (strlen(uid) > 0) {
-                       wprintf("<D:response>");
-                       wprintf("<D:href>");
+                       wprintf("<response>");
+                       wprintf("<href>");
                        groupdav_identify_host();
                        wprintf("/groupdav/");
                        urlescputs(WC->wc_roomname);
                        euid_escapize(encoded_uid, uid);
                        wprintf("/%s", encoded_uid);
-                       wprintf("</D:href>");
-                       wprintf("<D:propstat>");
-                       wprintf("<D:status>HTTP/1.1 200 OK</D:status>");
-                       wprintf("<D:prop><D:getetag>\"%ld\"</D:getetag></D:prop>", msgs[i]);
-                       wprintf("</D:propstat>");
-                       wprintf("</D:response>");
+                       wprintf("</href>");
+                       wprintf("<propstat>");
+                       wprintf("<status>HTTP/1.1 200 OK</status>");
+                       wprintf("<prop><getetag>\"%ld\"</getetag></prop>", msgs[i]);
+                       wprintf("</propstat>");
+                       wprintf("</response>");
                }
        }
 
-       wprintf("</D:multistatus>\n");
+       wprintf("</multistatus>\n");
        end_burst();
 
        if (msgs != NULL) {
index 37d538c370865b367d9a595f35afaf8568755552..2d5d985d8397c38ccc6936487b6b3b1463019f5d 100644 (file)
@@ -158,10 +158,11 @@ void serv_getln(char *strbuf, int bufsize)
        do {
                serv_read(&buf[0], 1);
                ch = buf[0];
-               strbuf[len++] = ch;
+               if ((ch != 13) && (ch != 10)) {
+                       strbuf[len++] = ch;
+               }
        } while ((ch != 10) && (ch != 0) && (len < (bufsize-1)));
-       if (strbuf[len-1] == 10) strbuf[--len] = 0;
-       if (strbuf[len-1] == 13) strbuf[--len] = 0;
+       strbuf[len] = 0;
 #ifdef SERV_TRACE
        lprintf(9, "%3d>%s\n", WC->serv_sock, strbuf);
 #endif