devnull.c (1223B)
1 /* Copyright (c) 2004 Russ Cox */ 2 #include <u.h> 3 #include <libc.h> 4 #include <venti.h> 5 #include <thread.h> 6 #include <libsec.h> 7 8 #ifndef _UNISTD_H_ 9 #pragma varargck type "F" VtFcall* 10 #pragma varargck type "T" void 11 #endif 12 13 int verbose; 14 15 enum 16 { 17 STACK = 8192 18 }; 19 20 void 21 usage(void) 22 { 23 fprint(2, "usage: venti/devnull [-v] [-a address]\n"); 24 threadexitsall("usage"); 25 } 26 27 void 28 threadmain(int argc, char **argv) 29 { 30 VtReq *r; 31 VtSrv *srv; 32 char *address; 33 34 fmtinstall('V', vtscorefmt); 35 fmtinstall('F', vtfcallfmt); 36 37 address = "tcp!*!venti"; 38 39 ARGBEGIN{ 40 case 'v': 41 verbose++; 42 break; 43 case 'a': 44 address = EARGF(usage()); 45 break; 46 default: 47 usage(); 48 }ARGEND 49 50 srv = vtlisten(address); 51 if(srv == nil) 52 sysfatal("vtlisten %s: %r", address); 53 54 while((r = vtgetreq(srv)) != nil){ 55 r->rx.msgtype = r->tx.msgtype+1; 56 if(verbose) 57 fprint(2, "<- %F\n", &r->tx); 58 switch(r->tx.msgtype){ 59 case VtTping: 60 break; 61 case VtTgoodbye: 62 break; 63 case VtTread: 64 r->rx.error = vtstrdup("no such block"); 65 r->rx.msgtype = VtRerror; 66 break; 67 case VtTwrite: 68 packetsha1(r->tx.data, r->rx.score); 69 break; 70 case VtTsync: 71 break; 72 } 73 if(verbose) 74 fprint(2, "-> %F\n", &r->rx); 75 vtrespond(r); 76 } 77 threadexitsall(nil); 78 }