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 a0d146ed 2005-07-12 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 Packet *p;
34 a0d146ed 2005-07-12 devnull
35 a0d146ed 2005-07-12 devnull fmtinstall('V', vtscorefmt);
36 a0d146ed 2005-07-12 devnull fmtinstall('F', vtfcallfmt);
37 a0d146ed 2005-07-12 devnull
38 a0d146ed 2005-07-12 devnull address = "tcp!*!venti";
39 a0d146ed 2005-07-12 devnull
40 a0d146ed 2005-07-12 devnull ARGBEGIN{
41 a0d146ed 2005-07-12 devnull case 'v':
42 a0d146ed 2005-07-12 devnull verbose++;
43 a0d146ed 2005-07-12 devnull break;
44 a0d146ed 2005-07-12 devnull case 'a':
45 a0d146ed 2005-07-12 devnull address = EARGF(usage());
46 a0d146ed 2005-07-12 devnull break;
47 a0d146ed 2005-07-12 devnull default:
48 a0d146ed 2005-07-12 devnull usage();
49 a0d146ed 2005-07-12 devnull }ARGEND
50 a0d146ed 2005-07-12 devnull
51 a0d146ed 2005-07-12 devnull srv = vtlisten(address);
52 a0d146ed 2005-07-12 devnull if(srv == nil)
53 a0d146ed 2005-07-12 devnull sysfatal("vtlisten %s: %r", argv[1]);
54 a0d146ed 2005-07-12 devnull
55 a0d146ed 2005-07-12 devnull while((r = vtgetreq(srv)) != nil){
56 a0d146ed 2005-07-12 devnull r->rx.msgtype = r->tx.msgtype+1;
57 a0d146ed 2005-07-12 devnull if(verbose)
58 a0d146ed 2005-07-12 devnull fprint(2, "<- %F\n", &r->tx);
59 a0d146ed 2005-07-12 devnull switch(r->tx.msgtype){
60 a0d146ed 2005-07-12 devnull case VtTping:
61 a0d146ed 2005-07-12 devnull break;
62 a0d146ed 2005-07-12 devnull case VtTgoodbye:
63 a0d146ed 2005-07-12 devnull break;
64 a0d146ed 2005-07-12 devnull case VtTread:
65 a0d146ed 2005-07-12 devnull r->rx.error = vtstrdup("no such block");
66 a0d146ed 2005-07-12 devnull r->rx.msgtype = VtRerror;
67 a0d146ed 2005-07-12 devnull break;
68 a0d146ed 2005-07-12 devnull case VtTwrite:
69 a0d146ed 2005-07-12 devnull packetsha1(r->tx.data, r->rx.score);
70 a0d146ed 2005-07-12 devnull break;
71 a0d146ed 2005-07-12 devnull case VtTsync:
72 a0d146ed 2005-07-12 devnull break;
73 a0d146ed 2005-07-12 devnull }
74 a0d146ed 2005-07-12 devnull if(verbose)
75 a0d146ed 2005-07-12 devnull fprint(2, "-> %F\n", &r->rx);
76 a0d146ed 2005-07-12 devnull vtrespond(r);
77 a0d146ed 2005-07-12 devnull }
78 a0d146ed 2005-07-12 devnull threadexitsall(nil);
79 a0d146ed 2005-07-12 devnull }
80 a0d146ed 2005-07-12 devnull