| .TH VENTI-CLIENT 3 |
| .SH NAME |
| vtconnect, vthello, vtread, vtwrite, vtreadpacket, vtwritepacket, vtsync, vtping, vtrpc, ventidoublechecksha1 \- Venti client |
| .SH SYNOPSIS |
| .ft L |
| #include <u.h> |
| .br |
| #include <libc.h> |
| .br |
| #include <venti.h> |
| .ta +\w'\fLPacket* 'u +\w'\fLxxxxxxxx'u |
| .PP |
| .B |
| Packet* vtrpc(VtConn *z, Packet *p) |
| .PP |
| .B |
| int vthello(VtConn *z) |
| .PP |
| .B |
| int vtconnect(VtConn *z) |
| .PP |
| .B |
| int vtread(VtConn *z, uchar score[VtScoreSize], |
| .br |
| .B |
| uint type, uchar *buf, int n) |
| .PP |
| .B |
| int vtwrite(VtConn *z, uchar score[VtScoreSize], |
| .br |
| .B |
| uint type, uchar *buf, int n) |
| .PP |
| .B |
| Packet* vtreadpacket(VtConn *z, uchar score[VtScoreSize], |
| .br |
| .B |
| uint type, int n) |
| .PP |
| .B |
| int vtwritepacket(VtConn *z, uchar score[VtScoreSize], |
| .br |
| .B |
| uint type, Packet *p) |
| .PP |
| .B |
| int vtsync(VtConn *z) |
| .PP |
| .B |
| int vtping(VtConn *z) |
| .PP |
| .B |
| extern int ventidoublechecksha1; /* default 1 */ |
| .SH DESCRIPTION |
| These routines execute the client side of the |
| .IR venti (7) |
| protocol. |
| .PP |
| .I Vtrpc |
| executes a single Venti RPC transaction, sending the request |
| packet |
| .IR p |
| and then waiting for and returning the response packet. |
| .I Vtrpc |
| will set the tag in the packet. |
| .I Vtrpc |
| frees |
| .IR p , |
| even on error. |
| .I Vtrpc |
| is typically called only indirectly, via the functions below. |
| .PP |
| .I Vthello |
| executes a |
| .B hello |
| transaction, setting |
| .IB z ->sid |
| to the name used by the server. |
| .I Vthello |
| is typically called only indirectly, via |
| .IR vtconnect . |
| .PP |
| .I Vtconnect |
| calls |
| .I vtversion |
| (see |
| .IR venti-conn (3)) |
| and |
| .IR vthello , |
| in that order, returning success only |
| if both succeed. |
| This sequence (calling |
| .I vtversion |
| and then |
| .IR vthello ) |
| must be done before the functions below can be called. |
| .PP |
| .I Vtread |
| reads the block with the given |
| .I score |
| and |
| .I type |
| from the server, |
| stores the returned data |
| in memory at |
| .IR buf , |
| and returns the number of bytes read. |
| If the server's block has size larger than |
| .IR n , |
| .I vtread |
| does not modify |
| .I buf |
| and |
| returns an error. |
| .PP |
| .I Vtwrite |
| writes the |
| .I n |
| bytes in |
| .I buf |
| as a block of the given |
| .IR type , |
| setting |
| .IR score . |
| .PP |
| .I Vtreadpacket |
| and |
| .I vtwritepacket |
| are like |
| .I vtread |
| and |
| .I vtwrite |
| but return or accept the block contents in the |
| form of a |
| .BR Packet . |
| They avoid making a copy of the data. |
| .PP |
| .I Vtsync |
| causes the server to flush all pending write requests |
| to disk before returning. |
| .PP |
| .I Vtping |
| executes a ping transaction with the server. |
| .PP |
| By default, |
| .I vtread |
| and |
| .I vtreadpacket |
| check that the SHA1 hash of the returned data |
| matches the requested |
| .IR score , |
| and |
| .I vtwrite |
| and |
| .I vtwritepacket |
| check that the returned |
| .I score |
| matches the SHA1 hash of the written data. |
| Setting |
| .I ventidoublechecksha1 |
| to zero disables these extra checks, |
| mainly for benchmarking purposes. |
| Doing so in production code is not recommended. |
| .PP |
| These functions can be called from multiple threads |
| or procs simultaneously to issue requests |
| in parallel. |
| Programs that issue requests from multiple threads |
| in the same proc should start separate procs running |
| .I vtsendproc |
| and |
| .I vtrecvproc |
| as described in |
| .IR venti-conn (3). |
| .SH SOURCE |
| .B \*9/src/libventi |
| .SH SEE ALSO |
| .IR venti (3), |
| .IR venti-conn (3), |
| .IR venti-packet (3), |
| .IR venti (7) |
| .SH DIAGNOSTICS |
| .I Vtrpc |
| and |
| .I vtpacket |
| return nil on error. |
| The other routines return \-1 on error. |
| .PP |
| .I Vtwrite |
| returns 0 on success: there are no partial writes. |