]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/webfs/webget.c
cwfs: back to previous version
[plan9front.git] / sys / src / cmd / webfs / webget.c
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 }