tventi-server.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tventi-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)