more font size tweaks.
[citadel.git] / webcit / downloads.c
index eb01d64d051404a6ce62308717ecd0496fa002e6..6e6c9b981b5ebf0acf8bc46dc664fc9630956acd 100644 (file)
@@ -3,22 +3,18 @@
  *
  * 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);
 
 extern char* static_dirs[];
@@ -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;
@@ -426,6 +425,7 @@ void
 InitModule_DOWNLOAD
 (void)
 {
+       RegisterCTX(CTX_FILELIST);
 
        RegisterIterator("ROOM:FILES", 0, NULL, LoadFileList,
                         NULL, DeleteHash, CTX_FILELIST, CTX_NONE, 
@@ -467,7 +467,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);