xref: /plan9/sys/src/cmd/venti/devnull.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
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
usage(void)21 usage(void)
22 {
23 	fprint(2, "usage: venti/devnull [-v] [-a address]\n");
24 	threadexitsall("usage");
25 }
26 
27 void
threadmain(int argc,char ** argv)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 }
79 
80