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