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