tsrvhello.c - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tsrvhello.c (833B)
---
1 #include <u.h>
2 #include <libc.h>
3 #include <venti.h>
4
5 int
6 vtsrvhello(VtConn *z)
7 {
8 VtFcall tx, rx;
9 Packet *p;
10
11 if((p = vtrecv(z)) == nil)
12 return -1;
13
14 if(vtfcallunpack(&tx, p) < 0){
15 packetfree(p);
16 return -1;
17 }
18 packetfree(p);
19
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);
39
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;
48
49 return 0;
50 }