Blame


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