message("getting %s", selection->fullname);
if(mothmode && !plumb)
typ = -1;
- else
+ else if((typ = mimetotype(selection->contenttype)) < 0)
typ = snooptype(fd);
+
switch(typ){
default:
if(plumb){
char *reltext;
char fullname[NNAME];
char tag[NNAME];
+ char contenttype[NNAME];
int map; /* is this an image map? */
};
struct Www{
#pragma varargck type "U" char*
void message(char *, ...);
int filetype(int, char *, int);
+int mimetotype(char *);
int snooptype(int);
void mkfieldpanel(Rtext *);
void geturl(char *, int, int, int);
}
int
-snooptype(int fd)
+mimetotype(char *mime)
{
+ int i;
static struct {
char *typ;
int val;
"image/", PAGE,
"text/", PLAIN,
"message/rfc822", PLAIN,
- };
+ };
+
+ for(i=0; i<nelem(tab); i++)
+ if(strncmp(mime, tab[i].typ, strlen(tab[i].typ)) == 0)
+ return tab[i].val;
+
+ return -1;
+}
+
+int
+snooptype(int fd)
+{
char buf[128];
int i;
+
if(filetype(fd, buf, sizeof(buf)) < 0)
return -1;
- for(i=0; i<nelem(tab); i++)
- if(strncmp(buf, tab[i].typ, strlen(tab[i].typ)) == 0)
- return tab[i].val;
- return -1;
+
+ return mimetotype(buf);
}
snprint(buf+n, sizeof(buf)-n, "/parsed/fragment");
readstr(buf, url->tag, sizeof(url->tag));
+
+ snprint(buf+n, sizeof(buf)-n, "/contenttype");
+ readstr(buf, url->contenttype, sizeof(url->contenttype));
snprint(buf+n, sizeof(buf)-n, "/contentencoding");
readstr(buf, buf, sizeof(buf));