6 vtfcallpack(VtFcall *f)
15 packetappend(p, buf, 2);
19 werrstr("vtfcallpack: unknown packet type %d", f->msgtype);
23 if(vtputstring(p, f->error) < 0)
34 if(vtputstring(p, f->version) < 0
35 || vtputstring(p, f->uid) < 0)
39 packetappend(p, buf, 2);
40 packetappend(p, f->crypto, f->ncrypto);
42 packetappend(p, buf, 1);
43 packetappend(p, f->codec, f->ncodec);
47 if(vtputstring(p, f->sid) < 0)
51 packetappend(p, buf, 2);
58 packetappend(p, f->score, VtScoreSize);
59 buf[0] = vttodisktype(f->blocktype);
63 buf[2] = f->count >> 8;
65 packetappend(p, buf, 4);
69 packetconcat(p, f->data);
73 buf[0] = vttodisktype(f->blocktype);
79 packetappend(p, buf, 4);
80 packetconcat(p, f->data);
84 packetappend(p, f->score, VtScoreSize);
102 vtfcallunpack(VtFcall *f, Packet *p)
106 memset(f, 0, sizeof *f);
108 if(packetconsume(p, buf, 2) < 0)
116 werrstr("vtfcallunpack: unknown bad packet type %d", f->msgtype);
121 if(vtgetstring(p, &f->error) < 0)
132 if(vtgetstring(p, &f->version) < 0
133 || vtgetstring(p, &f->uid) < 0
134 || packetconsume(p, buf, 2) < 0)
136 f->strength = buf[0];
139 f->crypto = vtmalloc(f->ncrypto);
140 if(packetconsume(p, buf, f->ncrypto) < 0)
143 if(packetconsume(p, buf, 1) < 0)
147 f->codec = vtmalloc(f->ncodec);
148 if(packetconsume(p, buf, f->ncodec) < 0)
154 if(vtgetstring(p, &f->sid) < 0
155 || packetconsume(p, buf, 2) < 0)
165 if(packetconsume(p, f->score, VtScoreSize) < 0
166 || packetconsume(p, buf, 4) < 0)
168 f->blocktype = vtfromdisktype(buf[0]);
169 if(~f->blocktype == 0)
171 f->count = (buf[2] << 8) | buf[3];
175 f->data = packetalloc();
176 packetconcat(f->data, p);
180 if(packetconsume(p, buf, 4) < 0)
182 f->blocktype = vtfromdisktype(buf[0]);
183 if(~f->blocktype == 0)
185 f->data = packetalloc();
186 packetconcat(f->data, p);
190 if(packetconsume(p, f->score, VtScoreSize) < 0)
201 if(packetsize(p) != 0)
207 werrstr("bad packet");
213 vtfcallclear(VtFcall *f)