1220e960cSDavid du Colombier /* Example of how to use webfs */
2220e960cSDavid du Colombier #include <u.h>
3220e960cSDavid du Colombier #include <libc.h>
4220e960cSDavid du Colombier
5220e960cSDavid du Colombier void
xfer(int from,int to)6220e960cSDavid du Colombier xfer(int from, int to)
7220e960cSDavid du Colombier {
8220e960cSDavid du Colombier char buf[12*1024];
9220e960cSDavid du Colombier int n;
10220e960cSDavid du Colombier
11220e960cSDavid du Colombier while((n = read(from, buf, sizeof buf)) > 0)
12220e960cSDavid du Colombier if(write(to, buf, n) < 0)
13220e960cSDavid du Colombier sysfatal("write failed: %r");
14220e960cSDavid du Colombier if(n < 0)
15220e960cSDavid du Colombier sysfatal("read failed: %r");
16220e960cSDavid du Colombier }
17220e960cSDavid du Colombier
18220e960cSDavid du Colombier void
usage(void)19220e960cSDavid du Colombier usage(void)
20220e960cSDavid du Colombier {
21*824682f6SDavid du Colombier fprint(2, "usage: webfsget [-b baseurl] [-m mtpt] [-p postbody] url\n");
22220e960cSDavid du Colombier exits("usage");
23220e960cSDavid du Colombier }
24220e960cSDavid du Colombier
25220e960cSDavid du Colombier void
main(int argc,char ** argv)26220e960cSDavid du Colombier main(int argc, char **argv)
27220e960cSDavid du Colombier {
28220e960cSDavid du Colombier int conn, ctlfd, fd, n;
29220e960cSDavid du Colombier char buf[128], *base, *mtpt, *post, *url;
30220e960cSDavid du Colombier
31220e960cSDavid du Colombier mtpt = "/mnt/web";
32220e960cSDavid du Colombier post = nil;
33220e960cSDavid du Colombier base = nil;
34220e960cSDavid du Colombier ARGBEGIN{
35220e960cSDavid du Colombier default:
36220e960cSDavid du Colombier usage();
37220e960cSDavid du Colombier case 'b':
38220e960cSDavid du Colombier base = EARGF(usage());
39220e960cSDavid du Colombier break;
40220e960cSDavid du Colombier case 'm':
41220e960cSDavid du Colombier mtpt = EARGF(usage());
42220e960cSDavid du Colombier break;
43220e960cSDavid du Colombier case 'p':
44220e960cSDavid du Colombier post = EARGF(usage());
45220e960cSDavid du Colombier break;
46220e960cSDavid du Colombier }ARGEND;
47220e960cSDavid du Colombier
48220e960cSDavid du Colombier if (argc != 1)
49220e960cSDavid du Colombier usage();
50220e960cSDavid du Colombier
51220e960cSDavid du Colombier url = argv[0];
52220e960cSDavid du Colombier
53220e960cSDavid du Colombier snprint(buf, sizeof buf, "%s/clone", mtpt);
54220e960cSDavid du Colombier if((ctlfd = open(buf, ORDWR)) < 0)
55220e960cSDavid du Colombier sysfatal("couldn't open %s: %r", buf);
56220e960cSDavid du Colombier if((n = read(ctlfd, buf, sizeof buf-1)) < 0)
57220e960cSDavid du Colombier sysfatal("reading clone: %r");
58220e960cSDavid du Colombier if(n == 0)
59220e960cSDavid du Colombier sysfatal("short read on clone");
60220e960cSDavid du Colombier buf[n] = '\0';
61220e960cSDavid du Colombier conn = atoi(buf);
62220e960cSDavid du Colombier
63220e960cSDavid du Colombier if(base)
64220e960cSDavid du Colombier if(fprint(ctlfd, "baseurl %s", base) < 0)
65220e960cSDavid du Colombier sysfatal("baseurl ctl write: %r");
66220e960cSDavid du Colombier
67220e960cSDavid du Colombier if(fprint(ctlfd, "url %s", url) <= 0)
68220e960cSDavid du Colombier sysfatal("get ctl write: %r");
69220e960cSDavid du Colombier
70220e960cSDavid du Colombier if(post){
71220e960cSDavid du Colombier snprint(buf, sizeof buf, "%s/%d/postbody", mtpt, conn);
72220e960cSDavid du Colombier if((fd = open(buf, OWRITE)) < 0)
73220e960cSDavid du Colombier sysfatal("open %s: %r", buf);
74220e960cSDavid du Colombier if(write(fd, post, strlen(post)) < 0)
75220e960cSDavid du Colombier sysfatal("post write failed: %r");
76220e960cSDavid du Colombier close(fd);
77220e960cSDavid du Colombier }
78220e960cSDavid du Colombier
79220e960cSDavid du Colombier snprint(buf, sizeof buf, "%s/%d/body", mtpt, conn);
80220e960cSDavid du Colombier if((fd = open(buf, OREAD)) < 0)
81220e960cSDavid du Colombier sysfatal("open %s: %r", buf);
82220e960cSDavid du Colombier
83220e960cSDavid du Colombier xfer(fd, 1);
84220e960cSDavid du Colombier exits(nil);
85220e960cSDavid du Colombier }
86