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>
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
13 a0d146ed 2005-07-12 devnull int verbose;
17 a0d146ed 2005-07-12 devnull STACK = 8192,
21 a0d146ed 2005-07-12 devnull usage(void)
23 a0d146ed 2005-07-12 devnull fprint(2, "usage: venti/devnull [-v] [-a address]\n");
24 a0d146ed 2005-07-12 devnull threadexitsall("usage");
28 a0d146ed 2005-07-12 devnull threadmain(int argc, char **argv)
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;
35 a0d146ed 2005-07-12 devnull fmtinstall('V', vtscorefmt);
36 a0d146ed 2005-07-12 devnull fmtinstall('F', vtfcallfmt);
38 a0d146ed 2005-07-12 devnull address = "tcp!*!venti";
40 a0d146ed 2005-07-12 devnull ARGBEGIN{
41 a0d146ed 2005-07-12 devnull case 'v':
42 a0d146ed 2005-07-12 devnull verbose++;
44 a0d146ed 2005-07-12 devnull case 'a':
45 a0d146ed 2005-07-12 devnull address = EARGF(usage());
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]);
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:
62 a0d146ed 2005-07-12 devnull case VtTgoodbye:
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;
68 a0d146ed 2005-07-12 devnull case VtTwrite:
69 a0d146ed 2005-07-12 devnull packetsha1(r->tx.data, r->rx.score);
71 a0d146ed 2005-07-12 devnull case VtTsync:
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);
78 a0d146ed 2005-07-12 devnull threadexitsall(nil);