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