Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}
79