123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #include <u.h>
- #include <libc.h>
- #include "httpd.h"
- #include "httpsrv.h"
- void
- usage(void)
- {
- fprint(2, "usage: httpd [-b inbuf] [-d domain] [-r remoteip] [-w webroot] [-N netdir] [-R reqline] [-L logfd0 logfd1] method version uri [search]\n");
- exits("usage");
- }
- char *netdir;
- char *webroot;
- char *HTTPLOG = "httpd/log";
- static HConnect connect;
- static HSPriv priv;
- HConnect*
- init(int argc, char **argv)
- {
- char *s, *vs;
- hinit(&connect.hin, 0, Hread);
- hinit(&connect.hout, 1, Hwrite);
- hmydomain = nil;
- connect.replog = writelog;
- connect.private = &priv;
- priv.remotesys = nil;
- priv.remoteserv = nil;
- fmtinstall('D', hdatefmt);
- fmtinstall('H', httpfmt);
- fmtinstall('U', hurlfmt);
- netdir = "/net";
- ARGBEGIN{
- case 'b':
- s = ARGF();
- if(s != nil)
- hload(&connect.hin, s);
- break;
- case 'd':
- hmydomain = ARGF();
- break;
- case 'r':
- priv.remotesys = ARGF();
- break;
- case 'w':
- webroot = ARGF();
- break;
- case 'N':
- netdir = ARGF();
- break;
- case 'L':
- s = ARGF();
- if(s == nil)
- usage();
- logall[0] = strtol(s, nil, 10);
- s = ARGF();
- if(s == nil)
- usage();
- logall[1] = strtol(s, nil, 10);
- break;
- case 'R':
- s = ARGF();
- if(s == nil)
- usage();
- snprint((char*)connect.header, sizeof(connect.header), "%s", s);
- break;
- default:
- usage();
- }ARGEND
- if(priv.remotesys == nil)
- priv.remotesys = "unknown";
- if(priv.remoteserv == nil)
- priv.remoteserv = "unknown";
- if(hmydomain == nil)
- hmydomain = "unknown";
- if(webroot == nil)
- webroot = "/usr/web";
- /*
- * open all files we might need before castrating namespace
- */
- time(nil);
- syslog(0, HTTPLOG, nil);
- if(argc != 4 && argc != 3)
- usage();
- connect.req.meth = argv[0];
- vs = argv[1];
- connect.req.vermaj = 0;
- connect.req.vermin = 9;
- if(strncmp(vs, "HTTP/", 5) == 0){
- vs += 5;
- connect.req.vermaj = strtoul(vs, &vs, 10);
- if(*vs == '.')
- vs++;
- connect.req.vermin = strtoul(vs, &vs, 10);
- }
- connect.req.uri = argv[2];
- connect.req.search = argv[3];
- connect.head.closeit = 1;
- connect.hpos = (uchar*)strchr((char*)connect.header, '\0');
- connect.hstop = connect.hpos;
- connect.reqtime = time(nil); /* not quite right, but close enough */
- return &connect;
- }
|