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