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