* Moved to the new string tokenizer API
[citadel.git] / webcit / groupdav_put.c
index c83be3f615080990de8da5f9c719ad520f8e6e9f..d634a9aff6b50072da143b84c24bb6ec0bdd189c 100644 (file)
@@ -46,7 +46,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
 
        /* Now extract the message euid */
        n = num_tokens(dav_pathname, '/');
-       extract_token(dav_uid, dav_pathname, n-1, '/');
+       extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid);
        remove_token(dav_pathname, n-1, '/');
 
        /* What's left is the room name.  Remove trailing slashes. */
@@ -60,22 +60,23 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                gotoroom(dav_roomname);
        }
        if (strcasecmp(WC->wc_roomname, dav_roomname)) {
-               wprintf("HTTP/1.1 404 not found\n");
+               wprintf("HTTP/1.1 404 not found\r\n");
                groupdav_common_headers();
                wprintf(
-                       "Content-Type: text/plain\n"
-                       "\n"
-                       "There is no folder called \"%s\" on this server.\n",
+                       "Content-Type: text/plain\r\n"
+                       "\r\n"
+                       "There is no folder called \"%s\" on this server.\r\n",
                        dav_roomname
                );
                return;
        }
 
-       /* Ugly hack to mess with the content type.  KOrganizer is either
+       /**********************
+        * Ugly hack to mess with the content type.  KOrganizer is either
         * not supplying one, or supplying the wrong one.
-        * FIXME - remove this after KOrg gets fixed.
-        */
+        * (Commented out because Reinhold has fixed this bug in KOrg.)
        strcpy(dav_content_type, supplied_content_type);
+       lprintf(9, "Supplied content type: %s\n", dav_content_type);
        switch (WC->wc_view) {
                case VIEW_ADDRESSBOOK:
                        strcpy(dav_content_type, "text/x-vcard");
@@ -89,6 +90,8 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                default:
                        break;
        }
+       lprintf(9, "  Forced content type: %s\n", dav_content_type);
+       ******************/
 
        /*
         * If an HTTP If-Match: header is present, the client is attempting
@@ -98,11 +101,14 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
         * version, so we fail...
         */
        if (strlen(dav_ifmatch) > 0) {
+               lprintf(9, "dav_ifmatch: %s\n", dav_ifmatch);
                old_msgnum = locate_message_by_uid(dav_uid);
+               lprintf(9, "old_msgnum:  %ld\n", old_msgnum);
                if (atol(dav_ifmatch) != old_msgnum) {
-                       wprintf("HTTP/1.1 412 Precondition Failed\n");
+                       wprintf("HTTP/1.1 412 Precondition Failed\r\n");
+                       lprintf(9, "HTTP/1.1 412 Precondition Failed\r\n");
                        groupdav_common_headers();
-                       wprintf("Content-Length: 0\n\n");
+                       wprintf("Content-Length: 0\r\n\r\n");
                        return;
                }
        }
@@ -115,11 +121,11 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
        serv_puts("ENT0 1|||4|||1|");
        serv_gets(buf);
        if (buf[0] != '8') {
-               wprintf("HTTP/1.1 502 Bad Gateway\n");
+               wprintf("HTTP/1.1 502 Bad Gateway\r\n");
                groupdav_common_headers();
-               wprintf("Content-type: text/plain\n"
-                       "\n"
-                       "%s\n", &buf[4]
+               wprintf("Content-type: text/plain\r\n"
+                       "\r\n"
+                       "%s\r\n", &buf[4]
                );
                return;
        }
@@ -134,11 +140,12 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
        strcpy(dav_uid, "");
        while (serv_gets(buf), strcmp(buf, "000")) {
                switch(n++) {
-                       case 0:
-                               new_msgnum = atol(buf);
+                       case 0: new_msgnum = atol(buf);
+                               break;
+                       case 1: lprintf(9, "new_msgnum=%ld (%s)\n", new_msgnum, buf);
+                               break;
+                       case 2: strcpy(dav_uid, buf);
                                break;
-                       case 2:
-                               strcpy(dav_uid, buf);
                        default:
                                break;
                }
@@ -148,21 +155,22 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
 
        /* Citadel failed in some way? */
        if (new_msgnum < 0L) {
-               wprintf("HTTP/1.1 502 Bad Gateway\n");
+               wprintf("HTTP/1.1 502 Bad Gateway\r\n");
                groupdav_common_headers();
-               wprintf("Content-type: text/plain\n"
-                       "\n"
-                       "new_msgnum is %ld\n"
-                       "\n", new_msgnum
+               wprintf("Content-type: text/plain\r\n"
+                       "\r\n"
+                       "new_msgnum is %ld\r\n"
+                       "\r\n", new_msgnum
                );
                return;
        }
 
        /* We created this item for the first time. */
        if (old_msgnum < 0L) {
-               wprintf("HTTP/1.1 201 Created\n");
+               wprintf("HTTP/1.1 201 Created\r\n");
+               lprintf(9, "HTTP/1.1 201 Created\r\n");
                groupdav_common_headers();
-               wprintf("Content-Length: 0\n");
+               wprintf("Content-Length: 0\r\n");
                wprintf("Location: ");
                if (strlen(WC->http_host) > 0) {
                        wprintf("%s://%s",
@@ -171,15 +179,16 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                }
                wprintf("/groupdav/");
                urlescputs(dav_roomname);
-               wprintf("/%s\n", dav_uid);
-               wprintf("\n");
+               wprintf("/%s\r\n", dav_uid);
+               wprintf("\r\n");
                return;
        }
 
        /* We modified an existing item. */
-       wprintf("HTTP/1.1 204 No Content\n");
+       wprintf("HTTP/1.1 204 No Content\r\n");
+       lprintf(9, "HTTP/1.1 204 No Content\r\n");
        groupdav_common_headers();
-       wprintf("Content-Length: 0\n\n");
+       wprintf("Content-Length: 0\r\n\r\n");
 
        /* The item we replaced has probably already been deleted by
         * the Citadel server, but we'll do this anyway, just in case.