+ StrBuf_ServGetln(Line);
+ GetServerStatusMsg(Line, NULL, 1, 0);
+ RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx);
+ http_transmit_thing(ChrPtr(RetMimeType), 0);
+ FreeStrBuf(&Line);
+}
+
+
+
+/*
+ * When the browser requests an image file from the Citadel server,
+ * this function is called to transmit it.
+ */
+void output_image(void)
+{
+ StrBuf *Buf;
+ wcsession *WCC = WC;
+ off_t bytes;
+ const char *MimeType;
+
+ Buf = NewStrBuf();
+ serv_printf("OIMG %s|%s", bstr("name"), bstr("parm"));
+ StrBuf_ServGetln(Buf);
+ if (GetServerStatus(Buf, NULL) == 2) {
+ int rc;
+ StrBufCutLeft(Buf, 4);
+ bytes = StrBufExtract_long(Buf, 0, '|');
+
+ /** Read it from the server */
+
+ rc = serv_read_binary(WCC->WBuf, bytes, Buf);
+ serv_puts("CLOS");
+ StrBuf_ServGetln(Buf);
+
+ if (rc > 0) {
+ MimeType = GuessMimeType (ChrPtr(WCC->WBuf), StrLength(WCC->WBuf));
+ /** Write it to the browser */
+ if (!IsEmptyStr(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));
+ }
+
+
+ /*
+ * Instead of an ugly 404, send a 1x1 transparent GIF
+ * when there's no such image on the server.
+ */
+ StrBufPrintf (Buf, "%s%s", static_dirs[0], "/webcit_icons/blank.gif");
+ output_static(ChrPtr(Buf));
+ FreeStrBuf(&Buf);
+}
+
+void
+InitModule_DOWNLOAD
+(void)
+{
+
+ RegisterIterator("ROOM:FILES", 0, NULL, LoadFileList,
+ NULL, DeleteHash, CTX_FILELIST, CTX_NONE,
+ IT_FLAG_DETECT_GROUPCHANGE);
+
+ RegisterSortFunc(HKEY("filemime"),
+ NULL, 0,
+ CompareFilelistByMime,
+ CompareFilelistByMimeRev,
+ GroupchangeFilelistByMime,
+ CTX_FILELIST);
+ RegisterSortFunc(HKEY("filename"),
+ NULL, 0,
+ CompareFilelistByName,
+ CompareFilelistByNameRev,
+ GroupchangeFilelistByName,
+ CTX_FILELIST);
+ RegisterSortFunc(HKEY("filesize"),
+ NULL, 0,
+ CompareFilelistBySize,
+ CompareFilelistBySizeRev,
+ GroupchangeFilelistBySize,
+ CTX_FILELIST);
+ RegisterSortFunc(HKEY("filesubject"),
+ NULL, 0,
+ CompareFilelistByComment,
+ CompareFilelistByCommentRev,
+ GroupchangeFilelistByComment,
+ CTX_FILELIST);
+ RegisterSortFunc(HKEY("fileunsorted"),
+ NULL, 0,
+ CompareFilelistBySequence,
+ CompareFilelistBySequence,
+ GroupchangeFilelistBySequence,
+ CTX_FILELIST);
+
+ RegisterNamespace("FILE:NAME", 0, 2, tmplput_FILE_NAME, NULL, CTX_FILELIST);
+ RegisterNamespace("FILE:SIZE", 0, 1, tmplput_FILE_SIZE, NULL, CTX_FILELIST);
+ 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);
+
+ WebcitAddUrlHandler(HKEY("image"), "", 0, output_image, ANONYMOUS);
+ WebcitAddUrlHandler(HKEY("display_mime_icon"), "", 0, display_mime_icon , ANONYMOUS);
+ WebcitAddUrlHandler(HKEY("download_file"), "", 0, download_file, NEED_URL);
+ WebcitAddUrlHandler(HKEY("delete_file"), "", 0, delete_file, NEED_URL);
+ WebcitAddUrlHandler(HKEY("upload_file"), "", 0, upload_file, 0);