venti-server.3 (2203B)
1 .TH VENTI-SERVER 3 2 .SH NAME 3 vtsrvhello, vtlisten, vtgetreq, vtrespond \- Venti server 4 .SH SYNOPSIS 5 .PP 6 .ft L 7 #include <u.h> 8 .br 9 #include <libc.h> 10 .br 11 #include <venti.h> 12 .ta +\w'\fLVtReq* 'u 13 .PP 14 .ft L 15 .nf 16 typedef struct VtReq 17 { 18 VtFcall tx; 19 VtFcall rx; 20 ... 21 } VtReq; 22 .PP 23 .B 24 int vtsrvhello(VtConn *z) 25 .PP 26 .B 27 VtSrv* vtlisten(char *addr) 28 .PP 29 .B 30 VtReq* vtgetreq(VtSrv *srv) 31 .PP 32 .B 33 void vtrespond(VtReq *req) 34 .SH DESCRIPTION 35 These routines execute the server side of the 36 .MR venti (7) 37 protocol. 38 .PP 39 .I Vtsrvhello 40 executes the server side of the initial 41 .B hello 42 transaction. 43 It sets 44 .IB z -> uid 45 with the user name claimed by the other side. 46 Each new connection must be initialized by running 47 .I vtversion 48 and then 49 .IR vtsrvhello . 50 The framework below takes care of this detail automatically; 51 .I vtsrvhello 52 is provided for programs that do not use the functions below. 53 .PP 54 .IR Vtlisten , 55 .IR vtgetreq , 56 and 57 .I vtrespond 58 provide a simple framework for writing Venti servers. 59 .PP 60 .I Vtlisten 61 announces at the network address 62 .IR addr , 63 returning a fresh 64 .B VtSrv 65 structure representing the service. 66 .PP 67 .I Vtgetreq 68 waits for and returns 69 the next 70 .BR read , 71 .BR write , 72 .BR sync , 73 or 74 .B ping 75 request from any client connected to 76 the service 77 .IR srv . 78 .B Hello 79 and 80 .B goodbye 81 messages are handled internally and not returned to the client. 82 The interface does not distinguish between the 83 different clients that may be connected at any given time. 84 The request can be found in the 85 .I tx 86 field of the returned 87 .BR VtReq . 88 .PP 89 Once a request has been served and a response stored in 90 .IB r ->rx \fR, 91 the server should call 92 .IR vtrespond 93 to send the response to the client. 94 .I Vtrespond 95 frees the structure 96 .I r 97 as well as the packets 98 .IB r ->tx.data 99 and 100 .IB r ->rx.data \fR. 101 .SH EXAMPLE 102 .B \*9/src/venti/cmd 103 contains two simple Venti servers 104 .B ro.c 105 and 106 .B devnull.c 107 written using these routines. 108 .I Ro 109 is a read-only Venti proxy (it rejects 110 .B write 111 requests). 112 .I Devnull 113 is a dangerous write-only Venti server: it discards all 114 blocks written to it and returns error on all reads. 115 .SH SOURCE 116 .B \*9/src/libventi 117 .SH SEE ALSO 118 .MR venti (3) , 119 .MR venti-conn (3) , 120 .MR venti-packet (3) , 121 .MR venti (7) , 122 .MR venti (8)