X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fdownloads.c;h=6e6c9b981b5ebf0acf8bc46dc664fc9630956acd;hb=HEAD;hp=eb01d64d051404a6ce62308717ecd0496fa002e6;hpb=e75e8817291f1504a58c70d721075d82293c9e72;p=citadel.git diff --git a/webcit/downloads.c b/webcit/downloads.c index eb01d64d0..9b7dde993 100644 --- a/webcit/downloads.c +++ b/webcit/downloads.c @@ -3,21 +3,17 @@ * * This program is open source software. You can redistribute it and/or * modify it under the terms of the GNU General Public License, version 3. - * - * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * - * - * */ #include "webcit.h" -#include "webserver.h" + + +CtxType CTX_FILELIST = CTX_NONE; extern void output_static(const char* What); @@ -44,22 +40,22 @@ void FreeFiles(void *vFile) /* -------------------------------------------------------------------------------- */ void tmplput_FILE_NAME(StrBuf *Target, WCTemplputParams *TP) { - FileListStruct *F = (FileListStruct*) CTX; + FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST); StrBufAppendTemplate(Target, TP, F->Filename, 0); } void tmplput_FILE_SIZE(StrBuf *Target, WCTemplputParams *TP) { - FileListStruct *F = (FileListStruct*) CTX; + FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST); StrBufAppendPrintf(Target, "%ld", F->FileSize); } void tmplput_FILEMIMETYPE(StrBuf *Target, WCTemplputParams *TP) { - FileListStruct *F = (FileListStruct*) CTX; + FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST); StrBufAppendTemplate(Target, TP, F->MimeType, 0); } void tmplput_FILE_COMMENT(StrBuf *Target, WCTemplputParams *TP) { - FileListStruct *F = (FileListStruct*) CTX; + FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST); StrBufAppendTemplate(Target, TP, F->Comment, 0); } @@ -67,7 +63,7 @@ void tmplput_FILE_COMMENT(StrBuf *Target, WCTemplputParams *TP) int Conditional_FILE_ISPIC(StrBuf *Target, WCTemplputParams *TP) { - FileListStruct *F = (FileListStruct*) CTX; + FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST); return F->IsPic; } @@ -274,13 +270,15 @@ void download_file(void) if (GetServerStatus(Buf, NULL) == 2) { StrBufCutLeft(Buf, 4); bytes = StrBufExtract_long(Buf, 0, '|'); - if (!force_download) { - StrBufExtract_token(ContentType, Buf, 3, '|'); - } - serv_read_binary(WCC->WBuf, bytes, Buf); + StrBufExtract_token(ContentType, Buf, 3, '|'); + + CheckGZipCompressionAllowed (SKEY(ContentType)); + if (force_download) + FlushStrBuf(ContentType); + + serv_read_binary_to_http(ContentType, bytes, 0, 0); serv_puts("CLOS"); StrBuf_ServGetln(Buf); - http_transmit_thing(ChrPtr(ContentType), 0); } else { StrBufCutLeft(Buf, 4); hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf)); @@ -401,6 +399,7 @@ void output_image(void) /** Write it to the browser */ if (!IsEmptyStr(MimeType)) { + CheckGZipCompressionAllowed (MimeType, strlen(MimeType)); http_transmit_thing(MimeType, 0); FreeStrBuf(&Buf); return; @@ -415,10 +414,9 @@ void output_image(void) /* * Instead of an ugly 404, send a 1x1 transparent GIF - * when there's no such image on the server. + * when there's no such image on the server display blank */ - StrBufPrintf (Buf, "%s%s", static_dirs[0], "/webcit_icons/blank.gif"); - output_static(ChrPtr(Buf)); + output_static(NULL); FreeStrBuf(&Buf); } @@ -426,6 +424,7 @@ void InitModule_DOWNLOAD (void) { + RegisterCTX(CTX_FILELIST); RegisterIterator("ROOM:FILES", 0, NULL, LoadFileList, NULL, DeleteHash, CTX_FILELIST, CTX_NONE, @@ -467,7 +466,7 @@ InitModule_DOWNLOAD RegisterNamespace("FILE:MIMETYPE", 0, 2, tmplput_FILEMIMETYPE, NULL, CTX_FILELIST); RegisterNamespace("FILE:COMMENT", 0, 2, tmplput_FILE_COMMENT, NULL, CTX_FILELIST); - RegisterConditional(HKEY("COND:FILE:ISPIC"), 0, Conditional_FILE_ISPIC, CTX_FILELIST); + RegisterConditional("COND:FILE:ISPIC", 0, Conditional_FILE_ISPIC, CTX_FILELIST); WebcitAddUrlHandler(HKEY("image"), "", 0, output_image, ANONYMOUS); WebcitAddUrlHandler(HKEY("display_mime_icon"), "", 0, display_mime_icon , ANONYMOUS);