off_t count = 0;
size_t res;
char *bigbuffer;
- char content_type[128];
+ const char *content_type;
int len;
fp = fopen(what, "rb");
wprintf("Cannot open %s: %s\r\n", what, strerror(errno));
} else {
len = strlen (what);
- if (!strncasecmp(&what[len - 4], ".gif", 4))
- safestrncpy(content_type, "image/gif", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".txt", 4))
- safestrncpy(content_type, "text/plain", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".css", 4))
- safestrncpy(content_type, "text/css", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".jpg", 4))
- safestrncpy(content_type, "image/jpeg", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".png", 4))
- safestrncpy(content_type, "image/png", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".ico", 4))
- safestrncpy(content_type, "image/x-icon", sizeof content_type);
- else if (!strncasecmp(&what[len - 5], ".html", 5))
- safestrncpy(content_type, "text/html", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".htm", 4))
- safestrncpy(content_type, "text/html", sizeof content_type);
- else if (!strncasecmp(&what[len - 4], ".wml", 4))
- safestrncpy(content_type, "text/vnd.wap.wml", sizeof content_type);
- else if (!strncasecmp(&what[len - 5], ".wmls", 5))
- safestrncpy(content_type, "text/vnd.wap.wmlscript", sizeof content_type);
- else if (!strncasecmp(&what[len - 5], ".wmlc", 5))
- safestrncpy(content_type, "application/vnd.wap.wmlc", sizeof content_type);
- else if (!strncasecmp(&what[len - 6], ".wmlsc", 6))
- safestrncpy(content_type, "application/vnd.wap.wmlscriptc", sizeof content_type);
- else if (!strncasecmp(&what[len - 5], ".wbmp", 5))
- safestrncpy(content_type, "image/vnd.wap.wbmp", sizeof content_type);
- else if (!strncasecmp(&what[len - 3], ".js", 3))
- safestrncpy(content_type, "text/javascript", sizeof content_type);
- else
- safestrncpy(content_type, "application/octet-stream", sizeof content_type);
+ content_type = GuessMimeByFilename(what, len);
if (fstat(fileno(fp), &statbuf) == -1) {
lprintf(9, "output_static('%s') -- FSTAT FAILED --\n", what);
}
}
-
-
-typedef struct _MimeGuess {
- const char *Pattern;
- size_t PatternLen;
- long PatternOffset;
- const char *MimeString;
-} MimeGuess;
-
-MimeGuess MyMimes [] = {
- {
- "GIF",
- 3,
- 0,
- "image/gif"
- },
- {
- "\xff\xd8",
- 2,
- 0,
- "image/jpeg"
- },
- {
- "\x89PNG",
- 4,
- 0,
- "image/png"
- },
- { // last...
- "",
- 0,
- 0,
- ""
- }
-};
-
-
-
/**
* \brief When the browser requests an image file from the Citadel server,
* this function is called to transmit it.
char buf[SIZ];
char *xferbuf = NULL;
off_t bytes;
- int MimeIndex = 0;
+ const char *MimeType;
serv_printf("OIMG %s|%s", bstr("name"), bstr("parm"));
serv_getln(buf, sizeof buf);
serv_puts("CLOS");
serv_getln(buf, sizeof buf);
- while (MyMimes[MimeIndex].PatternLen != 0)
- {
- if (strncmp(MyMimes[MimeIndex].Pattern,
- &xferbuf[MyMimes[MimeIndex].PatternOffset],
- MyMimes[MimeIndex].PatternLen) == 0)
- break;
- MimeIndex ++;
- }
-
+ MimeType = GuessMimeType (xferbuf, bytes);
/** Write it to the browser */
- if (MyMimes[MimeIndex].PatternLen != 0)
+ if (!IsEmptyStr(MimeType))
{
http_transmit_thing(xferbuf,
(size_t)bytes,
- MyMimes[MimeIndex].MimeString,
+ MimeType,
0);
free(xferbuf);
return;
if (!strcasecmp(action, "image")) {
output_image();
+ } else if (!strcasecmp(action, "display_mime_icon")) {
+ display_mime_icon();
/**
* All functions handled below this point ... make sure we log in
/* The users photo display / upload facility */
} else if (!strcasecmp(action, "display_editpic")) {
display_graphics_upload(_("your photo"),
- "UIMG 0|_userpic_",
+ "_userpic_",
"editpic");
} else if (!strcasecmp(action, "editpic")) {
- do_graphics_upload("UIMG 1|_userpic_");
+ do_graphics_upload("_userpic_");
/* room picture dispay / upload facility */
} else if (!strcasecmp(action, "display_editroompic")) {
display_graphics_upload(_("the icon for this room"),
- "UIMG 0|_roompic_",
+ "_roompic_",
"editroompic");
} else if (!strcasecmp(action, "editroompic")) {
- do_graphics_upload("UIMG 1|_roompic_");
+ do_graphics_upload("_roompic_");
/* the greetingpage hello pic */
} else if (!strcasecmp(action, "display_edithello")) {
display_graphics_upload(_("the Greetingpicture for the login prompt"),
- "UIMG 0|hello.gif",
+ "hello",
"edithellopic");
} else if (!strcasecmp(action, "edithellopic")) {
- do_graphics_upload("UIMG 1|hello.gif");
+ do_graphics_upload("hello");
/* the logoff banner */
} else if (!strcasecmp(action, "display_editgoodbyepic")) {
display_graphics_upload(_("the Logoff banner picture"),
- "UIMG 0|goodbuye.gif",
+ "UIMG 0|%s|goodbuye",
"editgoodbuyepic");
} else if (!strcasecmp(action, "editgoodbuyepic")) {
- do_graphics_upload("UIMG 1|goodbuye.gif");
+ do_graphics_upload("UIMG 1|%s|goodbuye");
} else if (!strcasecmp(action, "delete_floor")) {
delete_floor();