Blame


1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
4 056fe1ba 2003-11-23 devnull #include "queue.h"
5 056fe1ba 2003-11-23 devnull
6 a09e80f9 2004-05-23 devnull int chattyventi;
7 a09e80f9 2004-05-23 devnull
8 056fe1ba 2003-11-23 devnull VtConn*
9 056fe1ba 2003-11-23 devnull vtconn(int infd, int outfd)
10 056fe1ba 2003-11-23 devnull {
11 056fe1ba 2003-11-23 devnull VtConn *z;
12 18b18143 2005-02-13 devnull NetConnInfo *nci;
13 056fe1ba 2003-11-23 devnull
14 056fe1ba 2003-11-23 devnull z = vtmallocz(sizeof(VtConn));
15 056fe1ba 2003-11-23 devnull z->tagrend.l = &z->lk;
16 056fe1ba 2003-11-23 devnull z->rpcfork.l = &z->lk;
17 056fe1ba 2003-11-23 devnull z->infd = infd;
18 056fe1ba 2003-11-23 devnull z->outfd = outfd;
19 056fe1ba 2003-11-23 devnull z->part = packetalloc();
20 18b18143 2005-02-13 devnull nci = getnetconninfo(nil, infd);
21 18b18143 2005-02-13 devnull if(nci == nil)
22 18b18143 2005-02-13 devnull snprint(z->addr, sizeof z->addr, "/dev/fd/%d", infd);
23 18b18143 2005-02-13 devnull else{
24 18b18143 2005-02-13 devnull strecpy(z->addr, z->addr+sizeof z->addr, nci->raddr);
25 18b18143 2005-02-13 devnull freenetconninfo(nci);
26 18b18143 2005-02-13 devnull }
27 056fe1ba 2003-11-23 devnull return z;
28 056fe1ba 2003-11-23 devnull }
29 056fe1ba 2003-11-23 devnull
30 4544da52 2011-11-08 rsc int
31 4544da52 2011-11-08 rsc vtreconn(VtConn *z, int infd, int outfd)
32 4544da52 2011-11-08 rsc {
33 4544da52 2011-11-08 rsc NetConnInfo *nci;
34 4544da52 2011-11-08 rsc
35 4544da52 2011-11-08 rsc z->state = VtStateAlloc;
36 4544da52 2011-11-08 rsc if(z->infd >= 0)
37 4544da52 2011-11-08 rsc close(z->infd);
38 4544da52 2011-11-08 rsc z->infd = infd;
39 4544da52 2011-11-08 rsc if(z->outfd >= 0)
40 4544da52 2011-11-08 rsc close(z->outfd);
41 4544da52 2011-11-08 rsc z->outfd = outfd;
42 4544da52 2011-11-08 rsc nci = getnetconninfo(nil, infd);
43 4544da52 2011-11-08 rsc if(nci == nil)
44 4544da52 2011-11-08 rsc snprint(z->addr, sizeof z->addr, "/dev/fd/%d", infd);
45 4544da52 2011-11-08 rsc else{
46 4544da52 2011-11-08 rsc strecpy(z->addr, z->addr+sizeof z->addr, nci->raddr);
47 4544da52 2011-11-08 rsc freenetconninfo(nci);
48 4544da52 2011-11-08 rsc }
49 4544da52 2011-11-08 rsc return 0;
50 4544da52 2011-11-08 rsc }
51 4544da52 2011-11-08 rsc
52 056fe1ba 2003-11-23 devnull void
53 056fe1ba 2003-11-23 devnull vtfreeconn(VtConn *z)
54 056fe1ba 2003-11-23 devnull {
55 056fe1ba 2003-11-23 devnull vthangup(z);
56 056fe1ba 2003-11-23 devnull qlock(&z->lk);
57 6fc7da3c 2006-10-19 devnull /*
58 6fc7da3c 2006-10-19 devnull * Wait for send and recv procs to notice
59 6fc7da3c 2006-10-19 devnull * the hangup and clear out the queues.
60 6fc7da3c 2006-10-19 devnull */
61 6fc7da3c 2006-10-19 devnull while(z->readq || z->writeq){
62 056fe1ba 2003-11-23 devnull if(z->readq)
63 056fe1ba 2003-11-23 devnull _vtqhangup(z->readq);
64 6fc7da3c 2006-10-19 devnull if(z->writeq)
65 056fe1ba 2003-11-23 devnull _vtqhangup(z->writeq);
66 056fe1ba 2003-11-23 devnull rsleep(&z->rpcfork);
67 056fe1ba 2003-11-23 devnull }
68 056fe1ba 2003-11-23 devnull packetfree(z->part);
69 6fc7da3c 2006-10-19 devnull vtfree(z->version);
70 6fc7da3c 2006-10-19 devnull vtfree(z->sid);
71 4f6d2bb1 2007-04-08 devnull qunlock(&z->lk);
72 056fe1ba 2003-11-23 devnull vtfree(z);
73 056fe1ba 2003-11-23 devnull }