Blame


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