blob: 029f57bfed987949907650e59a50376c3d294dba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include <u.h>
#include <libc.h>
#include <venti.h>
int
vtsrvhello(VtConn *z)
{
VtFcall tx, rx;
Packet *p;
if((p = vtrecv(z)) == nil){
werrstr("unexpected eof on venti connection");
return -1;
}
if(vtfcallunpack(&tx, p) < 0){
packetfree(p);
return -1;
}
packetfree(p);
if(tx.type != VtThello){
vtfcallclear(&tx);
werrstr("bad packet type %d; want Thello %d", tx.type, VtThello);
return -1;
}
if(tx.tag != 0){
vtfcallclear(&tx);
werrstr("bad tag in hello");
return -1;
}
if(strcmp(tx.version, z->version) != 0){
vtfcallclear(&tx);
werrstr("bad version in hello");
return -1;
}
vtfree(z->uid);
z->uid = tx.uid;
tx.uid = nil;
vtfcallclear(&tx);
memset(&rx, 0, sizeof rx);
rx.type = VtRhello;
rx.tag = tx.tag;
rx.sid = "anonymous";
if((p = vtfcallpack(&rx)) == nil)
return -1;
if(vtsend(z, p) < 0)
return -1;
return 0;
}
|