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 -1;14 if(vtfcallunpack(&tx, p) < 0){15 packetfree(p);16 return -1;17 }18 packetfree(p);20 if(tx.msgtype != VtThello){21 vtfcallclear(&tx);22 werrstr("bad packet type %d; want Thello %d", tx.msgtype, VtThello);23 return -1;24 }25 if(tx.tag != 0){26 vtfcallclear(&tx);27 werrstr("bad tag in hello");28 return -1;29 }30 if(strcmp(tx.version, z->version) != 0){31 vtfcallclear(&tx);32 werrstr("bad version in hello");33 return -1;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.msgtype = VtRhello;42 rx.tag = tx.tag;43 rx.sid = "anonymous";44 if((p = vtfcallpack(&rx)) == nil)45 return -1;46 if(vtsend(z, p) < 0)47 return -1;49 return 0;50 }