10d862726SDavid du Colombier /*
20d862726SDavid du Colombier * Sample client.
30d862726SDavid du Colombier */
40d862726SDavid du Colombier #include <u.h>
50d862726SDavid du Colombier #include <libc.h>
60d862726SDavid du Colombier
70d862726SDavid du Colombier void
xfer(int from,int to)80d862726SDavid du Colombier xfer(int from, int to)
90d862726SDavid du Colombier {
100d862726SDavid du Colombier char buf[12*1024];
110d862726SDavid du Colombier int n;
120d862726SDavid du Colombier
130d862726SDavid du Colombier while((n = read(from, buf, sizeof buf)) > 0)
140d862726SDavid du Colombier if(write(to, buf, n) < 0)
150d862726SDavid du Colombier sysfatal("write failed: %r");
160d862726SDavid du Colombier if(n < 0)
170d862726SDavid du Colombier sysfatal("read failed: %r");
180d862726SDavid du Colombier }
190d862726SDavid du Colombier
200d862726SDavid du Colombier void
usage(void)210d862726SDavid du Colombier usage(void)
220d862726SDavid du Colombier {
230d862726SDavid du Colombier fprint(2, "usage: webget [-b baseurl] [-m mtpt] [-p postbody] url\n");
240d862726SDavid du Colombier exits("usage");
250d862726SDavid du Colombier }
260d862726SDavid du Colombier
270d862726SDavid du Colombier void
main(int argc,char ** argv)280d862726SDavid du Colombier main(int argc, char **argv)
290d862726SDavid du Colombier {
30*b8b25780SDavid du Colombier int conn, ctlfd, fd, n;
310d862726SDavid du Colombier char buf[128], *base, *mtpt, *post, *url;
320d862726SDavid du Colombier
330d862726SDavid du Colombier mtpt = "/mnt/web";
340d862726SDavid du Colombier post = nil;
350d862726SDavid du Colombier base = nil;
360d862726SDavid du Colombier ARGBEGIN{
370d862726SDavid du Colombier default:
380d862726SDavid du Colombier usage();
390d862726SDavid du Colombier case 'b':
400d862726SDavid du Colombier base = EARGF(usage());
410d862726SDavid du Colombier break;
420d862726SDavid du Colombier case 'm':
430d862726SDavid du Colombier mtpt = EARGF(usage());
440d862726SDavid du Colombier break;
450d862726SDavid du Colombier case 'p':
460d862726SDavid du Colombier post = EARGF(usage());
470d862726SDavid du Colombier break;
480d862726SDavid du Colombier }ARGEND;
490d862726SDavid du Colombier
500d862726SDavid du Colombier if (argc != 1)
510d862726SDavid du Colombier usage();
520d862726SDavid du Colombier
530d862726SDavid du Colombier url = argv[0];
540d862726SDavid du Colombier
550d862726SDavid du Colombier snprint(buf, sizeof buf, "%s/clone", mtpt);
560d862726SDavid du Colombier if((ctlfd = open(buf, ORDWR)) < 0)
570d862726SDavid du Colombier sysfatal("couldn't open %s: %r", buf);
580d862726SDavid du Colombier if((n = read(ctlfd, buf, sizeof buf-1)) < 0)
590d862726SDavid du Colombier sysfatal("reading clone: %r");
600d862726SDavid du Colombier if(n == 0)
610d862726SDavid du Colombier sysfatal("short read on clone");
620d862726SDavid du Colombier buf[n] = '\0';
630d862726SDavid du Colombier conn = atoi(buf);
640d862726SDavid du Colombier
650d862726SDavid du Colombier if(base)
660d862726SDavid du Colombier if(fprint(ctlfd, "baseurl %s", base) < 0)
670d862726SDavid du Colombier sysfatal("baseurl ctl write: %r");
680d862726SDavid du Colombier
690d862726SDavid du Colombier if(fprint(ctlfd, "url %s", url) <= 0)
700d862726SDavid du Colombier sysfatal("get ctl write: %r");
710d862726SDavid du Colombier
720d862726SDavid du Colombier if(post){
730d862726SDavid du Colombier snprint(buf, sizeof buf, "%s/%d/postbody", mtpt, conn);
740d862726SDavid du Colombier if((fd = open(buf, OWRITE)) < 0)
750d862726SDavid du Colombier sysfatal("open %s: %r", buf);
760d862726SDavid du Colombier if(write(fd, post, strlen(post)) < 0)
770d862726SDavid du Colombier sysfatal("post write failed: %r");
780d862726SDavid du Colombier close(fd);
790d862726SDavid du Colombier }
800d862726SDavid du Colombier
810d862726SDavid du Colombier snprint(buf, sizeof buf, "%s/%d/body", mtpt, conn);
820d862726SDavid du Colombier if((fd = open(buf, OREAD)) < 0)
830d862726SDavid du Colombier sysfatal("open %s: %r", buf);
840d862726SDavid du Colombier
850d862726SDavid du Colombier xfer(fd, 1);
860d862726SDavid du Colombier exits(nil);
870d862726SDavid du Colombier }
88