Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include "httpd.h"
4
#include "httpsrv.h"
5
 
6
void
7
usage(void)
8
{
9
	fprint(2, "usage: %s [-b inbuf] [-d domain] [-p localport]"
10
		" [-r remoteip] [-s uri-scheme] [-w webroot]"
11
		" [-L logfd0 logfd1] [-N netdir] [-R reqline]"
12
		" method version uri [search]\n", argv0);
13
	exits("usage");
14
}
15
 
16
char	*netdir;
17
char	*webroot;
18
char	*HTTPLOG = "httpd/log";
19
 
20
static	HConnect	connect;
21
static	HSPriv		priv;
22
 
23
HConnect*
24
init(int argc, char **argv)
25
{
26
	char *vs;
27
 
28
	hinit(&connect.hin, 0, Hread);
29
	hinit(&connect.hout, 1, Hwrite);
30
	hmydomain = nil;
31
	connect.replog = writelog;
32
	connect.scheme = "http";
33
	connect.port = "80";
34
	connect.private = &priv;
35
	priv.remotesys = nil;
36
	priv.remoteserv = nil;
37
	fmtinstall('D', hdatefmt);
38
	fmtinstall('H', httpfmt);
39
	fmtinstall('U', hurlfmt);
40
	netdir = "/net";
41
	ARGBEGIN{
42
	case 'b':
43
		hload(&connect.hin, EARGF(usage()));
44
		break;
45
	case 'd':
46
		hmydomain = EARGF(usage());
47
		break;
48
	case 'p':
49
		connect.port = EARGF(usage());
50
		break;
51
	case 'r':
52
		priv.remotesys = EARGF(usage());
53
		break;
54
	case 's':
55
		connect.scheme = EARGF(usage());
56
		break;
57
	case 'w':
58
		webroot = EARGF(usage());
59
		break;
60
	case 'L':
61
		logall[0] = strtol(EARGF(usage()), nil, 10);
62
		logall[1] = strtol(EARGF(usage()), nil, 10);
63
		break;
64
	case 'N':
65
		netdir = EARGF(usage());
66
		break;
67
	case 'R':
68
		snprint((char*)connect.header, sizeof(connect.header), "%s",
69
			EARGF(usage()));
70
		break;
71
	default:
72
		usage();
73
	}ARGEND
74
 
75
	if(priv.remotesys == nil)
76
		priv.remotesys = "unknown";
77
	if(priv.remoteserv == nil)
78
		priv.remoteserv = "unknown";
79
	if(hmydomain == nil)
80
		hmydomain = "unknown";
81
	if(webroot == nil)
82
		webroot = "/usr/web";
83
 
84
	/*
85
	 * open all files we might need before castrating namespace
86
	 */
87
	time(nil);
88
	syslog(0, HTTPLOG, nil);
89
 
90
	if(argc != 4 && argc != 3)
91
		usage();
92
 
93
	connect.req.meth = argv[0];
94
 
95
	vs = argv[1];
96
	connect.req.vermaj = 0;
97
	connect.req.vermin = 9;
98
	if(strncmp(vs, "HTTP/", 5) == 0){
99
		vs += 5;
100
		connect.req.vermaj = strtoul(vs, &vs, 10);
101
		if(*vs == '.')
102
			vs++;
103
		connect.req.vermin = strtoul(vs, &vs, 10);
104
	}
105
 
106
	connect.req.uri = argv[2];
107
	connect.req.search = argv[3];
108
	connect.head.closeit = 1;
109
	connect.hpos = (uchar*)strchr((char*)connect.header, '\0');
110
	connect.hstop = connect.hpos;
111
	connect.reqtime = time(nil);	/* not quite right, but close enough */
112
	return &connect;
113
}