tventi-fcall.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-fcall.3 (4744B)
       ---
            1 .TH VENTI-FCALL 3
            2 .SH NAME
            3 VtEntry, VtFcall, VtRoot,
            4 vtentrypack,
            5 vtentryunpack,
            6 vtfcallclear,
            7 vtfcallfmt,
            8 vtfcallpack,
            9 vtfcallunpack,
           10 vtfromdisktype,
           11 vttodisktype,
           12 vtgetstring,
           13 vtputstring,
           14 vtrootpack,
           15 vtrootunpack,
           16 vtparsescore,
           17 vtscorefmt \- venti data formats
           18 .SH SYNOPSIS
           19 .PP
           20 .ft L
           21 #include <u.h>
           22 .br
           23 #include <libc.h>
           24 .br
           25 #include <venti.h>
           26 .ta +\w'\fLxxxx'u
           27 .PP
           28 .ft L
           29 .nf
           30 enum
           31 {
           32         VtEntrySize = 40,
           33         VtRootSize = 300,
           34         VtScoreSize = 20,
           35 };
           36 .PP
           37 .ft L
           38 .nf
           39 typedef struct VtEntry
           40 {
           41         ulong gen;    /* generation number */
           42         ushort psize;   /* pointer block size */
           43         ushort dsize;   /* data block size */
           44         uchar type;
           45         uchar flags;
           46         uvlong size;
           47         uchar score[VtScoreSize];
           48 } VtEntry;
           49 .PP
           50 .ft L
           51 .nf
           52 typedef struct VtRoot
           53 {
           54         char name[128];
           55         char type[128];
           56         uchar score[VtScoreSize];  /* to a Dir block */
           57         ushort blocksize;          /* maximum block size */
           58         uchar prev[VtScoreSize];   /* previous root block */
           59 } VtRoot;
           60 .ta +\w'\fLPacket* 'u
           61 .PP
           62 .B
           63 void        vtentrypack(VtEntry *e, uchar *buf, int index)
           64 .br
           65 .B
           66 int        vtentryunpack(VtEntry *e, uchar *buf, int index)
           67 .PP
           68 .B
           69 Packet*        vtfcallpack(VtFcall *f)
           70 .br
           71 .B
           72 int        vtfcallunpack(VtFcall *f, Packet *p)
           73 .PP
           74 .B
           75 void vtfcallclear(VtFcall *f)
           76 .PP
           77 .B
           78 uint        vttodisktype(uint type)
           79 .br
           80 .B
           81 uint        vtfromdisktype(uint type)
           82 .PP
           83 .B
           84 int        vtputstring(Packet *p, char *s)
           85 .br
           86 .B
           87 int        vtgetstring(Packet *p, char **s)
           88 .PP
           89 .B
           90 void        vtrootpack(VtRoot *r, uchar *buf)
           91 .br
           92 .B
           93 int        vtrootunpack(VtRoot *r, uchar *buf)
           94 .PP
           95 .B
           96 int        vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
           97 .PP
           98 .B
           99 int        vtfcallfmt(Fmt *fmt)
          100 .B
          101 int        vtscorefmt(Fmt *fmt)
          102 .SH DESCRIPTION
          103 These routines convert between C representations of Venti
          104 structures and serialized representations used on disk and
          105 on the network.
          106 .PP
          107 .I Vtentrypack
          108 converts a
          109 .B VtEntry
          110 structure describing a Venti file
          111 (see
          112 .MR venti (7) )
          113 into a 40-byte
          114 .RB ( VtEntrySize )
          115 structure at
          116 .IB buf + index *40 \fR.
          117 Vtentryunpack
          118 does the reverse conversion.
          119 .PP
          120 .I Vtfcallpack
          121 converts a
          122 .B VtFcall
          123 structure describing a Venti protocol message
          124 (see
          125 .MR venti (7) )
          126 into a packet.
          127 .I Vtfcallunpack
          128 does the reverse conversion.
          129 .PP
          130 The fields in a
          131 .B VtFcall
          132 are named after the protocol fields described in
          133 .MR venti (7) ,
          134 except that the
          135 .B type
          136 field is renamed
          137 .BR blocktype .
          138 The
          139 .B msgtype
          140 field holds the one-byte message type:
          141 .BR VtThello ,
          142 .BR VtRhello ,
          143 and so on.
          144 .PP
          145 .I Vtfcallclear
          146 frees the strings
          147 .IB f ->error \fR,
          148 .IB f ->version \fR,
          149 .IB f ->uid \fR,
          150 .IB f ->sid \fR,
          151 the buffers
          152 .IB f ->crypto
          153 and
          154 .IB f ->codec \fR,
          155 and the packet
          156 .IB f ->data \fR.
          157 .PP
          158 The block type enumeration defined in
          159 .B <venti.h>
          160 (presented in 
          161 .MR venti (7) )
          162 differs from the one used on disk and in the network
          163 protocol.
          164 The disk and network representation uses different
          165 constants and does not distinguish between
          166 .BI VtDataType+ n
          167 and
          168 .BI VtDirType+ n
          169 blocks.
          170 .I Vttodisktype
          171 converts a
          172 .B <venti.h>
          173 enumeration value to the disk value;
          174 .I vtfromdisktype
          175 converts a disk value to the enumeration value,
          176 always using the
          177 .B VtDirType
          178 pointers.
          179 The
          180 .B VtFcall
          181 field
          182 .B blocktype
          183 is an enumeration value
          184 .RI ( vtfcallpack
          185 and
          186 .I vtfcallunpack
          187 convert to and from the disk values used in packets
          188 automatically),
          189 so most programs will not need to call these functions.
          190 .PP
          191 .I Vtputstring
          192 appends the Venti protocol representation of the string
          193 .I s
          194 to the packet
          195 .IR p .
          196 .I Vtgetstring
          197 reads a string from the packet, returning a pointer to a copy
          198 of the string in
          199 .BI * s \fR.
          200 The copy must be freed by the caller.
          201 These functions are used by
          202 .I vtfcallpack
          203 and
          204 .IR vtfcallunpack ;
          205 most programs will not need to call them directly.
          206 .PP
          207 .I Vtrootpack
          208 converts a
          209 .B VtRoot
          210 structure describing a Venti file tree
          211 into the 300-byte 
          212 .RB ( VtRootSize )
          213 buffer pointed to by
          214 .IR buf .
          215 .I Vtrootunpack does the reverse conversion.
          216 .PP
          217 .I Vtparsescore
          218 parses the 40-digit hexadecimal string
          219 .IR s ,
          220 writing its value
          221 into
          222 .IR score .
          223 If the hexadecimal string is prefixed with
          224 a text label followed by a colon, a copy of that
          225 label is returned in
          226 .BI * prefix \fR.
          227 If
          228 .I prefix
          229 is nil, the label is ignored.
          230 .PP
          231 .I Vtfcallfmt
          232 and
          233 .I vtscorefmt
          234 are
          235 .MR print (3)
          236 formatters to print
          237 .B VtFcall
          238 structures and scores.
          239 .I Vtfcallfmt
          240 assumes that
          241 .I vtscorefmt
          242 is installed as
          243 .BR %V .
          244 .SH SOURCE
          245 .B \*9/src/libventi
          246 .SH SEE ALSO
          247 .MR venti (1) ,
          248 .MR venti (3) ,
          249 .MR venti (7)
          250 .SH DIAGNOSTICS
          251 .IR Vtentrypack ,
          252 .IR vtfcallpack ,
          253 .IR vtrootpack ,
          254 and
          255 .I vtfcallclear
          256 cannot fail.
          257 .PP
          258 .IR Vtentryunpack ,
          259 .IR vtrootunpack ,
          260 .IR vtputstring ,
          261 .IR vtgetstring ,
          262 and
          263 .I vtparsescore
          264 return 0 on success, \-1 on error.
          265 .PP
          266 .I Vtfcallpack
          267 returns a packet on success, nil on error.
          268 .PP
          269 .I Vttodisktype
          270 and
          271 .I vtfromdisktype
          272 return
          273 .B VtCorruptType
          274 (255)
          275 when presented with invalid input.