mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
50 lines
833 B
C
50 lines
833 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <venti.h>
|
|
|
|
int
|
|
vtsrvhello(VtConn *z)
|
|
{
|
|
VtFcall tx, rx;
|
|
Packet *p;
|
|
|
|
if((p = vtrecv(z)) == nil)
|
|
return -1;
|
|
|
|
if(vtfcallunpack(&tx, p) < 0){
|
|
packetfree(p);
|
|
return -1;
|
|
}
|
|
packetfree(p);
|
|
|
|
if(tx.msgtype != VtThello){
|
|
vtfcallclear(&tx);
|
|
werrstr("bad packet type %d; want Thello %d", tx.msgtype, VtThello);
|
|
return -1;
|
|
}
|
|
if(tx.tag != 0){
|
|
vtfcallclear(&tx);
|
|
werrstr("bad tag in hello");
|
|
return -1;
|
|
}
|
|
if(strcmp(tx.version, z->version) != 0){
|
|
vtfcallclear(&tx);
|
|
werrstr("bad version in hello");
|
|
return -1;
|
|
}
|
|
vtfree(z->uid);
|
|
z->uid = tx.uid;
|
|
tx.uid = nil;
|
|
vtfcallclear(&tx);
|
|
|
|
memset(&rx, 0, sizeof rx);
|
|
rx.msgtype = VtRhello;
|
|
rx.tag = tx.tag;
|
|
rx.sid = "anonymous";
|
|
if((p = vtfcallpack(&rx)) == nil)
|
|
return -1;
|
|
if(vtsend(z, p) < 0)
|
|
return -1;
|
|
|
|
return 0;
|
|
}
|