Blame


1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
4 056fe1ba 2003-11-23 devnull
5 a09e80f9 2004-05-23 devnull int ventidoublechecksha1 = 1;
6 a09e80f9 2004-05-23 devnull
7 056fe1ba 2003-11-23 devnull static int
8 056fe1ba 2003-11-23 devnull vtfcallrpc(VtConn *z, VtFcall *ou, VtFcall *in)
9 056fe1ba 2003-11-23 devnull {
10 056fe1ba 2003-11-23 devnull Packet *p;
11 056fe1ba 2003-11-23 devnull
12 056fe1ba 2003-11-23 devnull p = vtfcallpack(ou);
13 056fe1ba 2003-11-23 devnull if(p == nil)
14 056fe1ba 2003-11-23 devnull return -1;
15 7252036f 2005-11-02 devnull if((p = _vtrpc(z, p, ou)) == nil)
16 056fe1ba 2003-11-23 devnull return -1;
17 056fe1ba 2003-11-23 devnull if(vtfcallunpack(in, p) < 0){
18 056fe1ba 2003-11-23 devnull packetfree(p);
19 056fe1ba 2003-11-23 devnull return -1;
20 056fe1ba 2003-11-23 devnull }
21 a09e80f9 2004-05-23 devnull if(chattyventi)
22 a09e80f9 2004-05-23 devnull fprint(2, "%s <- %F\n", argv0, in);
23 7643b263 2005-07-13 devnull if(in->msgtype == VtRerror){
24 056fe1ba 2003-11-23 devnull werrstr(in->error);
25 056fe1ba 2003-11-23 devnull vtfcallclear(in);
26 056fe1ba 2003-11-23 devnull packetfree(p);
27 056fe1ba 2003-11-23 devnull return -1;
28 056fe1ba 2003-11-23 devnull }
29 7643b263 2005-07-13 devnull if(in->msgtype != ou->msgtype+1){
30 056fe1ba 2003-11-23 devnull werrstr("type mismatch: sent %c%d got %c%d",
31 7643b263 2005-07-13 devnull "TR"[ou->msgtype&1], ou->msgtype>>1,
32 7643b263 2005-07-13 devnull "TR"[in->msgtype&1], in->msgtype>>1);
33 056fe1ba 2003-11-23 devnull vtfcallclear(in);
34 056fe1ba 2003-11-23 devnull packetfree(p);
35 056fe1ba 2003-11-23 devnull return -1;
36 056fe1ba 2003-11-23 devnull }
37 056fe1ba 2003-11-23 devnull packetfree(p);
38 056fe1ba 2003-11-23 devnull return 0;
39 056fe1ba 2003-11-23 devnull }
40 056fe1ba 2003-11-23 devnull
41 056fe1ba 2003-11-23 devnull int
42 056fe1ba 2003-11-23 devnull vthello(VtConn *z)
43 056fe1ba 2003-11-23 devnull {
44 056fe1ba 2003-11-23 devnull VtFcall tx, rx;
45 056fe1ba 2003-11-23 devnull
46 056fe1ba 2003-11-23 devnull memset(&tx, 0, sizeof tx);
47 7643b263 2005-07-13 devnull tx.msgtype = VtThello;
48 056fe1ba 2003-11-23 devnull tx.version = z->version;
49 056fe1ba 2003-11-23 devnull tx.uid = z->uid;
50 056fe1ba 2003-11-23 devnull if(tx.uid == nil)
51 056fe1ba 2003-11-23 devnull tx.uid = "anonymous";
52 056fe1ba 2003-11-23 devnull if(vtfcallrpc(z, &tx, &rx) < 0)
53 056fe1ba 2003-11-23 devnull return -1;
54 056fe1ba 2003-11-23 devnull z->sid = rx.sid;
55 056fe1ba 2003-11-23 devnull rx.sid = 0;
56 056fe1ba 2003-11-23 devnull vtfcallclear(&rx);
57 056fe1ba 2003-11-23 devnull return 0;
58 056fe1ba 2003-11-23 devnull }
59 056fe1ba 2003-11-23 devnull
60 056fe1ba 2003-11-23 devnull Packet*
61 056fe1ba 2003-11-23 devnull vtreadpacket(VtConn *z, uchar score[VtScoreSize], uint type, int n)
62 056fe1ba 2003-11-23 devnull {
63 056fe1ba 2003-11-23 devnull VtFcall tx, rx;
64 056fe1ba 2003-11-23 devnull
65 7cb74894 2004-06-17 devnull if(memcmp(score, vtzeroscore, VtScoreSize) == 0)
66 7cb74894 2004-06-17 devnull return packetalloc();
67 7cb74894 2004-06-17 devnull
68 056fe1ba 2003-11-23 devnull memset(&tx, 0, sizeof tx);
69 7643b263 2005-07-13 devnull tx.msgtype = VtTread;
70 7643b263 2005-07-13 devnull tx.blocktype = type;
71 056fe1ba 2003-11-23 devnull tx.count = n;
72 056fe1ba 2003-11-23 devnull memmove(tx.score, score, VtScoreSize);
73 056fe1ba 2003-11-23 devnull if(vtfcallrpc(z, &tx, &rx) < 0)
74 056fe1ba 2003-11-23 devnull return nil;
75 056fe1ba 2003-11-23 devnull if(packetsize(rx.data) > n){
76 056fe1ba 2003-11-23 devnull werrstr("read returned too much data");
77 056fe1ba 2003-11-23 devnull packetfree(rx.data);
78 056fe1ba 2003-11-23 devnull return nil;
79 056fe1ba 2003-11-23 devnull }
80 a09e80f9 2004-05-23 devnull if(ventidoublechecksha1){
81 a09e80f9 2004-05-23 devnull packetsha1(rx.data, tx.score);
82 a09e80f9 2004-05-23 devnull if(memcmp(score, tx.score, VtScoreSize) != 0){
83 a09e80f9 2004-05-23 devnull werrstr("read asked for %V got %V", score, tx.score);
84 a09e80f9 2004-05-23 devnull packetfree(rx.data);
85 a09e80f9 2004-05-23 devnull return nil;
86 a09e80f9 2004-05-23 devnull }
87 056fe1ba 2003-11-23 devnull }
88 056fe1ba 2003-11-23 devnull return rx.data;
89 056fe1ba 2003-11-23 devnull }
90 056fe1ba 2003-11-23 devnull
91 056fe1ba 2003-11-23 devnull int
92 056fe1ba 2003-11-23 devnull vtread(VtConn *z, uchar score[VtScoreSize], uint type, uchar *buf, int n)
93 056fe1ba 2003-11-23 devnull {
94 056fe1ba 2003-11-23 devnull int nn;
95 056fe1ba 2003-11-23 devnull Packet *p;
96 056fe1ba 2003-11-23 devnull
97 056fe1ba 2003-11-23 devnull if((p = vtreadpacket(z, score, type, n)) == nil)
98 056fe1ba 2003-11-23 devnull return -1;
99 056fe1ba 2003-11-23 devnull nn = packetsize(p);
100 056fe1ba 2003-11-23 devnull if(packetconsume(p, buf, nn) < 0)
101 056fe1ba 2003-11-23 devnull abort();
102 c5eb6860 2004-06-16 devnull packetfree(p);
103 056fe1ba 2003-11-23 devnull return nn;
104 056fe1ba 2003-11-23 devnull }
105 056fe1ba 2003-11-23 devnull
106 056fe1ba 2003-11-23 devnull int
107 056fe1ba 2003-11-23 devnull vtwritepacket(VtConn *z, uchar score[VtScoreSize], uint type, Packet *p)
108 056fe1ba 2003-11-23 devnull {
109 056fe1ba 2003-11-23 devnull VtFcall tx, rx;
110 056fe1ba 2003-11-23 devnull
111 7cb74894 2004-06-17 devnull if(packetsize(p) == 0){
112 7cb74894 2004-06-17 devnull memmove(score, vtzeroscore, VtScoreSize);
113 7cb74894 2004-06-17 devnull return 0;
114 7cb74894 2004-06-17 devnull }
115 7643b263 2005-07-13 devnull tx.msgtype = VtTwrite;
116 7643b263 2005-07-13 devnull tx.blocktype = type;
117 056fe1ba 2003-11-23 devnull tx.data = p;
118 a09e80f9 2004-05-23 devnull if(ventidoublechecksha1)
119 a09e80f9 2004-05-23 devnull packetsha1(p, score);
120 056fe1ba 2003-11-23 devnull if(vtfcallrpc(z, &tx, &rx) < 0)
121 056fe1ba 2003-11-23 devnull return -1;
122 a09e80f9 2004-05-23 devnull if(ventidoublechecksha1){
123 a09e80f9 2004-05-23 devnull if(memcmp(score, rx.score, VtScoreSize) != 0){
124 a09e80f9 2004-05-23 devnull werrstr("sha1 hash mismatch: want %V got %V", score, rx.score);
125 a09e80f9 2004-05-23 devnull return -1;
126 a09e80f9 2004-05-23 devnull }
127 4192ac1d 2004-06-09 devnull }else
128 4192ac1d 2004-06-09 devnull memmove(score, rx.score, VtScoreSize);
129 056fe1ba 2003-11-23 devnull return 0;
130 056fe1ba 2003-11-23 devnull }
131 056fe1ba 2003-11-23 devnull
132 056fe1ba 2003-11-23 devnull int
133 056fe1ba 2003-11-23 devnull vtwrite(VtConn *z, uchar score[VtScoreSize], uint type, uchar *buf, int n)
134 056fe1ba 2003-11-23 devnull {
135 056fe1ba 2003-11-23 devnull Packet *p;
136 361e279c 2005-01-18 devnull int nn;
137 056fe1ba 2003-11-23 devnull
138 0dc99502 2005-01-14 devnull p = packetforeign(buf, n, 0, nil);
139 361e279c 2005-01-18 devnull nn = vtwritepacket(z, score, type, p);
140 361e279c 2005-01-18 devnull packetfree(p);
141 361e279c 2005-01-18 devnull return nn;
142 056fe1ba 2003-11-23 devnull }
143 056fe1ba 2003-11-23 devnull
144 056fe1ba 2003-11-23 devnull int
145 056fe1ba 2003-11-23 devnull vtsync(VtConn *z)
146 056fe1ba 2003-11-23 devnull {
147 056fe1ba 2003-11-23 devnull VtFcall tx, rx;
148 056fe1ba 2003-11-23 devnull
149 7643b263 2005-07-13 devnull tx.msgtype = VtTsync;
150 056fe1ba 2003-11-23 devnull return vtfcallrpc(z, &tx, &rx);
151 056fe1ba 2003-11-23 devnull }
152 056fe1ba 2003-11-23 devnull
153 056fe1ba 2003-11-23 devnull int
154 056fe1ba 2003-11-23 devnull vtping(VtConn *z)
155 056fe1ba 2003-11-23 devnull {
156 056fe1ba 2003-11-23 devnull VtFcall tx, rx;
157 056fe1ba 2003-11-23 devnull
158 7643b263 2005-07-13 devnull tx.msgtype = VtTping;
159 056fe1ba 2003-11-23 devnull return vtfcallrpc(z, &tx, &rx);
160 056fe1ba 2003-11-23 devnull }
161 056fe1ba 2003-11-23 devnull
162 056fe1ba 2003-11-23 devnull int
163 056fe1ba 2003-11-23 devnull vtconnect(VtConn *z)
164 056fe1ba 2003-11-23 devnull {
165 056fe1ba 2003-11-23 devnull if(vtversion(z) < 0)
166 056fe1ba 2003-11-23 devnull return -1;
167 056fe1ba 2003-11-23 devnull if(vthello(z) < 0)
168 056fe1ba 2003-11-23 devnull return -1;
169 056fe1ba 2003-11-23 devnull return 0;
170 056fe1ba 2003-11-23 devnull }
171 056fe1ba 2003-11-23 devnull