From 056fe1ba7fa0b70f871dfb9005b24eb8e4cc230b Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 23 Nov 2003 18:19:58 +0000 Subject: new venti library. --- src/libventi/srvhello.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/libventi/srvhello.c (limited to 'src/libventi/srvhello.c') diff --git a/src/libventi/srvhello.c b/src/libventi/srvhello.c new file mode 100644 index 00000000..20aedbee --- /dev/null +++ b/src/libventi/srvhello.c @@ -0,0 +1,50 @@ +#include +#include +#include + +int +vtsrvhello(VtConn *z) +{ + VtFcall tx, rx; + Packet *p; + + if((p = vtrecv(z)) == nil) + return 0; + + if(vtfcallunpack(&tx, p) < 0){ + packetfree(p); + return 0; + } + packetfree(p); + + if(tx.type != VtThello){ + vtfcallclear(&tx); + werrstr("bad packet type %d; want Thello %d", tx.type, VtThello); + return 0; + } + if(tx.tag != 0){ + vtfcallclear(&tx); + werrstr("bad tag in hello"); + return 0; + } + if(strcmp(tx.version, z->version) != 0){ + vtfcallclear(&tx); + werrstr("bad version in hello"); + return 0; + } + 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 0; + if(vtsend(z, p) < 0) + return 0; + + return 1; +} -- cgit v1.2.3