Atachment downloading: choose HTTP-Errorcode depending on the server error.
[citadel.git] / webcit / messages.c
index 93107db0c5b074410bf2660f2e4a8afcadab3a51..2915ce1480d5b623c2320395ee8e7cad63830c56 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "webcit.h"
 #include "webserver.h"
-#include "groupdav.h"
+#include "dav.h"
 #include "calendar.h"
 
 HashList *MsgHeaderHandler = NULL;
@@ -1010,7 +1010,7 @@ void post_message(void)
                int saving_to_drafts = 0;
                long HeaderLen = 0;
 
-               saving_to_drafts = !strcasecmp(bstr("submit_action"), "drafts");
+               saving_to_drafts = !strcasecmp(bstr("submit_action"), "draft");
                Buf = NewStrBuf();
 
                if (saving_to_drafts) {
@@ -1113,7 +1113,7 @@ void post_message(void)
                                if (saving_to_drafts) {
                                        AppendImportantMessage(_("Message has been saved to Drafts.\n"), -1);
                                        gotoroom(WCC->CurRoom.name);
-                                       display_enter();
+                                       readloop(readnew, eUseDefault);
                                        FreeStrBuf(&Buf);
                                        return;
                                } else if (  (havebstr("recp"))
@@ -1307,7 +1307,6 @@ void display_enter(void)
        const StrBuf *display_name = NULL;
        int recipient_required = 0;
        int subject_required = 0;
-       int recipient_bad = 0;
        int is_anonymous = 0;
        wcsession *WCC = WC;
        int i = 0;
@@ -1323,7 +1322,9 @@ void display_enter(void)
                is_anonymous = 1;
        }
 
-       /* First test to see whether this is a room that requires recipients to be entered */
+       /*
+        * First, do we have permission to enter messages in this room at all?
+        */
        Line = NewStrBuf();
        serv_puts("ENT0 0");
        StrBuf_ServGetln(Line);
@@ -1595,20 +1596,14 @@ void display_enter(void)
                rc = GetServerStatusMsg(CmdBuf, &Result, 0, 0);
 
                if (    (Result == 570)         /* invalid or missing recipient(s) */
-                       || (Result == 550)      /* access control problem */
+                       || (Result == 550)      /* higher access required to send Internet mail */
                ) {
-                       if (    havebstr("recp")
-                               && havebstr("cc")
-                               && havebstr("bcc")
-                       ) {
-                               recipient_bad = 1;      /* FIXME ... do something with this? */
-                       }
+                       /* These errors will have been displayed and are excusable */
                }
                else if (rc != 2) {     /* Any other error means that we cannot continue */
-
-                       /* FIXME IMMEDIATELY this code results in a blank screen!!! */
-                       wc_printf("<em>%s</em><br>\n", ChrPtr(CmdBuf) +4);
+                       AppendImportantMessage(ChrPtr(CmdBuf) + 4, StrLength(CmdBuf) - 4);
                        FreeStrBuf(&CmdBuf);
+                       readloop(readnew, eUseDefault);
                        return;
                }
                FreeStrBuf(&CmdBuf);
@@ -1726,6 +1721,7 @@ void postpart(StrBuf *partnum, StrBuf *filename, int force_download)
 void mimepart(int force_download)
 {
        long msgnum;
+       long ErrorDetail;
        StrBuf *att;
        wcsession *WCC = WC;
        StrBuf *Buf;
@@ -1739,7 +1735,7 @@ void mimepart(int force_download)
 
        serv_printf("OPNA %ld|%s", msgnum, ChrPtr(att));
        StrBuf_ServGetln(Buf);
-       if (GetServerStatus(Buf, NULL) == 2) {
+       if (GetServerStatus(Buf, &ErrorDetail) == 2) {
                StrBufCutLeft(Buf, 4);
                bytes = StrBufExtract_long(Buf, 0, '|');
                if (!force_download) {
@@ -1763,7 +1759,23 @@ void mimepart(int force_download)
                http_transmit_thing(CT, 0);
        } else {
                StrBufCutLeft(Buf, 4);
-               hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf));
+               switch (ErrorDetail) {
+               default:
+               case ERROR + MESSAGE_NOT_FOUND:
+                       hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf));
+                       break;
+               case ERROR + NOT_LOGGED_IN:
+                       hprintf("HTTP/1.1 401 %s\n", ChrPtr(Buf));
+                       break;
+
+               case ERROR + HIGHER_ACCESS_REQUIRED:
+                       hprintf("HTTP/1.1 403 %s\n", ChrPtr(Buf));
+                       break;
+               case ERROR + INTERNAL_ERROR:
+               case ERROR + TOO_BIG:
+                       hprintf("HTTP/1.1 500 %s\n", ChrPtr(Buf));
+                       break;
+               }
                output_headers(0, 0, 0, 0, 0, 0);
                hprintf("Content-Type: text/plain\r\n");
                begin_burst();