X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmessages.c;h=fd886f4158ed1e503fbdecd56b5b752ee079ba3e;hb=54a3ac9e8fbc5e533cec6b83c171fa87551b8af4;hp=4e45ea69681778d6b99d784e9cb08972e768165f;hpb=f81a5a37a8c492f1061c8cca886d820acc9e3fb6;p=citadel.git diff --git a/webcit/messages.c b/webcit/messages.c index 4e45ea696..fd886f415 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -531,7 +531,7 @@ message_summary *ReadOneMessageSummary(StrBuf *RawMessage, const char *DefaultSu StrBufCutLeft(Buf, nBuf + 1); Eval->f(Msg, Buf); } - else syslog(1, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf)); + else syslog(LOG_INFO, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf)); } return Msg; } @@ -930,6 +930,7 @@ void post_mime_to_server(void) { /* Remember, serv_printf() appends an extra newline */ if (include_text_alt) { + StrBuf *Buf; serv_printf("Content-type: multipart/alternative; " "boundary=\"%s\"\n", alt_boundary); serv_printf("This is a multipart message in MIME format.\n"); @@ -939,18 +940,30 @@ void post_mime_to_server(void) { serv_puts("Content-Transfer-Encoding: quoted-printable"); serv_puts(""); txtmail = html_to_ascii(bstr("msgtext"), 0, 80, 0); - text_to_server_qp(txtmail); /* Transmit message in quoted-printable encoding */ + Buf = NewStrBufPlain(txtmail, -1); free(txtmail); + text_to_server_qp(Buf); /* Transmit message in quoted-printable encoding */ + FreeStrBuf(&Buf); serv_printf("\n--%s", alt_boundary); } - serv_puts("Content-type: text/html; charset=utf-8"); - serv_puts("Content-Transfer-Encoding: quoted-printable"); - serv_puts(""); - serv_puts("\r\n"); - text_to_server_qp(bstr("msgtext")); /* Transmit message in quoted-printable encoding */ - serv_puts("\r\n"); + if (havebstr("markdown")) + { + serv_puts("Content-type: text/x-markdown; charset=utf-8"); + serv_puts("Content-Transfer-Encoding: quoted-printable"); + serv_puts(""); + text_to_server_qp(sbstr("msgtext")); /* Transmit message in quoted-printable encoding */ + } + else + { + serv_puts("Content-type: text/html; charset=utf-8"); + serv_puts("Content-Transfer-Encoding: quoted-printable"); + serv_puts(""); + serv_puts("\r\n"); + text_to_server_qp(sbstr("msgtext")); /* Transmit message in quoted-printable encoding */ + serv_puts("\r\n"); + } if (include_text_alt) { serv_printf("--%s--", alt_boundary); @@ -1054,7 +1067,7 @@ void post_message(void) StrBuf_ServGetln(Buf); if (GetServerStatusMsg(Buf, NULL, 1, 2) != 2) { /* You probably don't even have a dumb Drafts folder */ - syslog(9, "%s:%d: server save to drafts error: %s\n", __FILE__, __LINE__, ChrPtr(Buf) + 4); + syslog(LOG_DEBUG, "%s:%d: server save to drafts error: %s\n", __FILE__, __LINE__, ChrPtr(Buf) + 4); AppendImportantMessage(_("Saved to Drafts failed: "), -1); display_enter(); FreeStrBuf(&Buf); @@ -1128,7 +1141,7 @@ void post_message(void) } else { - syslog(9, "%s\n", ChrPtr(CmdBuf)); + syslog(LOG_DEBUG, "%s\n", ChrPtr(CmdBuf)); serv_puts(ChrPtr(CmdBuf)); FreeStrBuf(&CmdBuf); @@ -1165,7 +1178,7 @@ void post_message(void) } dont_post = lbstr("postseq"); } else { - syslog(9, "%s:%d: server post error: %s", __FILE__, __LINE__, ChrPtr(Buf) + 4); + syslog(LOG_DEBUG, "%s:%d: server post error: %s", __FILE__, __LINE__, ChrPtr(Buf) + 4); AppendImportantMessage(ChrPtr(Buf) + 4, StrLength(Buf) - 4); display_enter(); if (saving_to_drafts) gotoroom(WCC->CurRoom.name); @@ -1219,24 +1232,40 @@ void upload_attachment(void) { long newnlen; void *v; wc_mime_attachment *att; + const StrBuf *Tmpl = sbstr("template"); + const StrBuf *MimeType = NULL; + const StrBuf *UID; - syslog(9, "upload_attachment()\n"); - wc_printf("upload_attachment()
\n"); + begin_burst(); + syslog(LOG_DEBUG, "upload_attachment()\n"); + if (!Tmpl) wc_printf("upload_attachment()
\n"); if (WCC->upload_length <= 0) { - syslog(9, "ERROR no attachment was uploaded\n"); - wc_printf("ERROR no attachment was uploaded
\n"); + syslog(LOG_DEBUG, "ERROR no attachment was uploaded\n"); + if (Tmpl) + { + putlbstr("UPLOAD_ERROR", 1); + MimeType = DoTemplate(SKEY(Tmpl), NULL, &NoCtx); + } + else wc_printf("ERROR no attachment was uploaded
\n"); + http_transmit_thing(ChrPtr(MimeType), 0); + return; } - syslog(9, "Client is uploading %d bytes\n", WCC->upload_length); - wc_printf("Client is uploading %d bytes
\n", WCC->upload_length); - att = malloc(sizeof(wc_mime_attachment)); + syslog(LOG_DEBUG, "Client is uploading %d bytes\n", WCC->upload_length); + if (Tmpl) putlbstr("UPLOAD_LENGTH", WCC->upload_length); + else wc_printf("Client is uploading %d bytes
\n", WCC->upload_length); + + att = (wc_mime_attachment*)malloc(sizeof(wc_mime_attachment)); memset(att, 0, sizeof(wc_mime_attachment )); att->length = WCC->upload_length; att->ContentType = NewStrBufPlain(WCC->upload_content_type, -1); att->FileName = NewStrBufDup(WCC->upload_filename); - + UID = SBSTR("qquuid"); + if (UID) + att->PartNum = NewStrBufDup(UID); + if (WCC->attachments == NULL) { WCC->attachments = NewHash(1, Flathash); } @@ -1271,6 +1300,9 @@ void upload_attachment(void) { att->Data = WCC->upload; WCC->upload = NULL; WCC->upload_length = 0; + + if (Tmpl) MimeType = DoTemplate(SKEY(Tmpl), NULL, &NoCtx); + http_transmit_thing(ChrPtr(MimeType), 0); } @@ -1287,26 +1319,35 @@ void remove_attachment(void) { StrBuf *WhichAttachment; HashPos *at; long len; + int found=0; const char *key; WhichAttachment = NewStrBufDup(sbstr("which_attachment")); + if (ChrPtr(WhichAttachment)[0] == '/') + StrBufCutLeft(WhichAttachment, 1); StrBufUnescape(WhichAttachment, 0); at = GetNewHashPos(WCC->attachments, 0); do { + vAtt = NULL; GetHashPos(WCC->attachments, at, &len, &key, &vAtt); - + att = (wc_mime_attachment*) vAtt; - if ((att != NULL) && - (strcmp(ChrPtr(WhichAttachment), - ChrPtr(att->FileName) ) == 0)) + if ((att != NULL) && + ( + !strcmp(ChrPtr(WhichAttachment), ChrPtr(att->FileName)) || + ((att->PartNum != NULL) && + !strcmp(ChrPtr(WhichAttachment), ChrPtr(att->PartNum))) + )) { DeleteEntryFromHash(WCC->attachments, at); + found=1; break; } } while (NextHashPos(WCC->attachments, at)); + FreeStrBuf(&WhichAttachment); - wc_printf("remove_attachment() completed\n"); + wc_printf("remove_attachment(%d) completed\n", found); } @@ -1339,7 +1380,7 @@ long l_nvto; const char *ReplyToModeStrings [3] = { "reply", - "replyalle", + "replyall", "forward" }; typedef enum _eReplyToNodes { @@ -1695,7 +1736,10 @@ void display_enter(void) begin_burst(); output_headers(1, 0, 0, 0, 1, 0); - DoTemplate(HKEY("edit_message"), NULL, &NoCtx); + if (WCC->CurRoom.defview == VIEW_WIKIMD) + DoTemplate(HKEY("edit_markdown_epic"), NULL, &NoCtx); + else + DoTemplate(HKEY("edit_message"), NULL, &NoCtx); end_burst(); return; @@ -1803,6 +1847,7 @@ void postpart(StrBuf *partnum, StrBuf *filename, int force_download) */ void mimepart(int force_download) { + int detect_mime = 0; long msgnum; long ErrorDetail; StrBuf *att; @@ -1821,25 +1866,32 @@ void mimepart(int force_download) if (GetServerStatus(Buf, &ErrorDetail) == 2) { StrBufCutLeft(Buf, 4); bytes = StrBufExtract_long(Buf, 0, '|'); - if (!force_download) { - StrBufExtract_token(ContentType, Buf, 3, '|'); + StrBufExtract_token(ContentType, Buf, 3, '|'); + CheckGZipCompressionAllowed (SKEY(ContentType)); + if (force_download) + { + FlushStrBuf(ContentType); + detect_mime = 0; } - - serv_read_binary(WCC->WBuf, bytes, Buf); - serv_puts("CLOS"); - StrBuf_ServGetln(Buf); - CT = ChrPtr(ContentType); - - if (!force_download) { - if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) { + else + { + if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) + { StrBufExtract_token(Buf, WCC->Hdr->HR.ReqLine, 2, '/'); CT = GuessMimeByFilename(SKEY(Buf)); + StrBufPlain(ContentType, CT, -1); } - if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) { - CT = GuessMimeType(SKEY(WCC->WBuf)); + if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) + { + detect_mime = 1; } } - http_transmit_thing(CT, 0); + serv_read_binary_to_http(ContentType, bytes, 0, detect_mime); + + serv_read_binary(WCC->WBuf, bytes, Buf); + serv_puts("CLOS"); + StrBuf_ServGetln(Buf); + CT = ChrPtr(ContentType); } else { StrBufCutLeft(Buf, 4); switch (ErrorDetail) { @@ -1859,7 +1911,12 @@ void mimepart(int force_download) hprintf("HTTP/1.1 500 %s\n", ChrPtr(Buf)); break; } - output_headers(0, 0, 0, 0, 0, 0); + + hprintf("Pragma: no-cache\r\n" + "Cache-Control: no-store\r\n" + "Expires: -1\r\n" + ); + hprintf("Content-Type: text/plain\r\n"); begin_burst(); wc_printf(_("An error occurred while retrieving this part: %s\n"),