Subversion Repositories planix.SVN

Rev

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

Rev Author Line No. Line
2 - 1
/*
2
 * Sample client.
3
 */
4
#include <u.h>
5
#include <libc.h>
6
 
7
void
8
xfer(int from, int to)
9
{
10
	char buf[12*1024];
11
	int n;
12
 
13
	while((n = read(from, buf, sizeof buf)) > 0)
14
		if(write(to, buf, n) < 0)
15
			sysfatal("write failed: %r");
16
	if(n < 0)
17
		sysfatal("read failed: %r");
18
}
19
 
20
void
21
usage(void)
22
{
23
	fprint(2, "usage: webget [-b baseurl] [-m mtpt] [-p postbody] url\n");
24
	exits("usage");
25
}
26
 
27
void
28
main(int argc, char **argv)
29
{
30
	int conn, ctlfd, fd, n;
31
	char buf[128], *base, *mtpt, *post, *url;
32
 
33
	mtpt = "/mnt/web";
34
	post = nil;
35
	base = nil;
36
	ARGBEGIN{
37
	default:
38
		usage();
39
	case 'b':
40
		base = EARGF(usage());
41
		break;
42
	case 'm':
43
		mtpt = EARGF(usage());
44
		break;
45
	case 'p':
46
		post = EARGF(usage());
47
		break;
48
	}ARGEND;
49
 
50
	if (argc != 1) 
51
		usage();
52
 
53
	url = argv[0];
54
 
55
	snprint(buf, sizeof buf, "%s/clone", mtpt);
56
	if((ctlfd = open(buf, ORDWR)) < 0)
57
		sysfatal("couldn't open %s: %r", buf);
58
	if((n = read(ctlfd, buf, sizeof buf-1)) < 0)
59
		sysfatal("reading clone: %r");
60
	if(n == 0)
61
		sysfatal("short read on clone");
62
	buf[n] = '\0';
63
	conn = atoi(buf);
64
 
65
	if(base)
66
		if(fprint(ctlfd, "baseurl %s", base) < 0)
67
			sysfatal("baseurl ctl write: %r");
68
 
69
	if(fprint(ctlfd, "url %s", url) <= 0)
70
		sysfatal("get ctl write: %r");
71
 
72
	if(post){
73
		snprint(buf, sizeof buf, "%s/%d/postbody", mtpt, conn);
74
		if((fd = open(buf, OWRITE)) < 0)
75
			sysfatal("open %s: %r", buf);
76
		if(write(fd, post, strlen(post)) < 0)
77
			sysfatal("post write failed: %r");
78
		close(fd);
79
	}
80
 
81
	snprint(buf, sizeof buf, "%s/%d/body", mtpt, conn);
82
	if((fd = open(buf, OREAD)) < 0)
83
		sysfatal("open %s: %r", buf);
84
 
85
	xfer(fd, 1);
86
	exits(nil);
87
}