79 lines · 1.2 KB · C
RawDownload
/* Copyright (c) 2004 Russ Cox */#include <u.h>#include <libc.h>#include <venti.h>#include <thread.h>#include <libsec.h> #ifndef _UNISTD_H_#pragma varargck type "F" VtFcall*#pragma varargck type "T" void#endif int verbose; enum{	STACK = 8192}; voidusage(void){	fprint(2, "usage: venti/devnull [-v] [-a address]\n");	threadexitsall("usage");} voidthreadmain(int argc, char **argv){	VtReq *r;	VtSrv *srv;	char *address; 	fmtinstall('V', vtscorefmt);	fmtinstall('F', vtfcallfmt);		address = "tcp!*!venti"; 	ARGBEGIN{	case 'v':		verbose++;		break;	case 'a':		address = EARGF(usage());		break;	default:		usage();	}ARGEND 	srv = vtlisten(address);	if(srv == nil)		sysfatal("vtlisten %s: %r", address); 	while((r = vtgetreq(srv)) != nil){		r->rx.msgtype = r->tx.msgtype+1;		if(verbose)			fprint(2, "<- %F\n", &r->tx);		switch(r->tx.msgtype){		case VtTping:			break;		case VtTgoodbye:			break;		case VtTread:			r->rx.error = vtstrdup("no such block");			r->rx.msgtype = VtRerror;			break;		case VtTwrite:			packetsha1(r->tx.data, r->rx.score);			break;		case VtTsync:			break;		}		if(verbose)			fprint(2, "-> %F\n", &r->rx);		vtrespond(r);	}	threadexitsall(nil);}