/*
- * Copyright (c) 1996-2010 by the citadel.org team
+ * Copyright (c) 1996-2012 by the citadel.org team
*
* This program is open source software. You can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
+ * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "webcit.h"
#include "webserver.h"
+CtxType CTX_FILELIST = CTX_NONE;
+
+extern void output_static(const char* What);
+
extern char* static_dirs[];
typedef struct _FileListStruct {
/* -------------------------------------------------------------------------------- */
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);
}
int Conditional_FILE_ISPIC(StrBuf *Target, WCTemplputParams *TP)
{
- FileListStruct *F = (FileListStruct*) CTX;
+ FileListStruct *F = (FileListStruct*) CTX(CTX_FILELIST);
return F->IsPic;
}
int sequence = 0;
char buf[1024];
CompareFunc SortIt;
- int HavePic;
+ int HavePic = 0;
WCTemplputParams SubTP;
memset(&SubTP, 0, sizeof(WCTemplputParams));
}
Put(Files, SKEY(Entry->Filename), Entry, FreeFiles);
}
+ if (HavePic)
+ putbstr("__HAVE_PIC", NewStrBufPlain(HKEY("1")));
SubTP.Filter.ContextType = CTX_FILELIST;
SortIt = RetrieveSort(&SubTP, NULL, 0, HKEY("fileunsorted"), 0);
if (SortIt != NULL)
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));
void delete_file(void)
{
const StrBuf *MimeType;
- StrBuf *Buf;
+ StrBuf *Line;
char buf[256];
safestrncpy(buf, bstr("file"), sizeof buf);
unescape_input(buf);
serv_printf("DELF %s", buf);
- Buf = NewStrBuf();
- StrBuf_ServGetln(Buf);
- GetServerStatus(Buf, NULL);
- StrBufCutLeft(Buf, 4);
- strcpy(WC->ImportantMessage, ChrPtr(Buf));
+
+ StrBuf_ServGetln(Line);
+ GetServerStatusMsg(Line, NULL, 1, 0);
+
MimeType = DoTemplate(HKEY("files"), NULL, &NoCtx);
http_transmit_thing(ChrPtr(MimeType), 0);
- FreeStrBuf(&Buf);
+ FreeStrBuf(&Line);
}
{
const StrBuf *RetMimeType;
const char *MimeType;
- char buf[1024];
+ StrBuf *Line;
long bytes_transmitted = 0;
long blocksize;
const StrBuf *Desc;
ChrPtr(WCC->upload_filename),
MimeType,
ChrPtr(Desc));
-
- serv_getln(buf, sizeof buf);
- if (buf[0] != '2')
- {
- strcpy(WCC->ImportantMessage, &buf[4]);
+ Line = NewStrBuf();
+ StrBuf_ServGetln(Line);
+ if (GetServerStatusMsg(Line, NULL, 1, 2) != 2) {
RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx);
http_transmit_thing(ChrPtr(RetMimeType), 0);
+ FreeStrBuf(&Line);
return;
}
blocksize = (WCC->upload_length - bytes_transmitted);
}
serv_printf("WRIT %ld", blocksize);
- serv_getln(buf, sizeof buf);
- if (buf[0] == '7')
- {
- blocksize = atoi(&buf[4]);
+ StrBuf_ServGetln(Line);
+ if (GetServerStatusMsg(Line, NULL, 0, 0) == 7) {
+ blocksize = atoi(ChrPtr(Line) + 4);
serv_write(&ChrPtr(WCC->upload)[bytes_transmitted], blocksize);
bytes_transmitted += blocksize;
}
+ else
+ break;
}
serv_puts("UCLS 1");
- serv_getln(buf, sizeof buf);
- strcpy(WCC->ImportantMessage, &buf[4]);
+ StrBuf_ServGetln(Line);
+ GetServerStatusMsg(Line, NULL, 1, 0);
RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx);
http_transmit_thing(ChrPtr(RetMimeType), 0);
+ FreeStrBuf(&Line);
}
/** Write it to the browser */
if (!IsEmptyStr(MimeType))
{
+ CheckGZipCompressionAllowed (MimeType, strlen(MimeType));
http_transmit_thing(MimeType, 0);
FreeStrBuf(&Buf);
return;
}
}
/* hm... unknown mimetype? fallback to blank gif */
- }
+ }
+ else {
+ syslog(LOG_DEBUG, "OIMG failed: %s", ChrPtr(Buf));
+ }
/*
InitModule_DOWNLOAD
(void)
{
+ RegisterCTX(CTX_FILELIST);
RegisterIterator("ROOM:FILES", 0, NULL, LoadFileList,
NULL, DeleteHash, CTX_FILELIST, CTX_NONE,
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);