use nci to label connections
This commit is contained in:
parent
8f4871fd2e
commit
18b1814390
4 changed files with 29 additions and 3 deletions
|
|
@ -9,6 +9,7 @@ VtConn*
|
||||||
vtconn(int infd, int outfd)
|
vtconn(int infd, int outfd)
|
||||||
{
|
{
|
||||||
VtConn *z;
|
VtConn *z;
|
||||||
|
NetConnInfo *nci;
|
||||||
|
|
||||||
z = vtmallocz(sizeof(VtConn));
|
z = vtmallocz(sizeof(VtConn));
|
||||||
z->tagrend.l = &z->lk;
|
z->tagrend.l = &z->lk;
|
||||||
|
|
@ -16,6 +17,13 @@ vtconn(int infd, int outfd)
|
||||||
z->infd = infd;
|
z->infd = infd;
|
||||||
z->outfd = outfd;
|
z->outfd = outfd;
|
||||||
z->part = packetalloc();
|
z->part = packetalloc();
|
||||||
|
nci = getnetconninfo(nil, infd);
|
||||||
|
if(nci == nil)
|
||||||
|
snprint(z->addr, sizeof z->addr, "/dev/fd/%d", infd);
|
||||||
|
else{
|
||||||
|
strecpy(z->addr, z->addr+sizeof z->addr, nci->raddr);
|
||||||
|
freenetconninfo(nci);
|
||||||
|
}
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ vtdial(char *addr)
|
||||||
{
|
{
|
||||||
char *na;
|
char *na;
|
||||||
int fd;
|
int fd;
|
||||||
|
VtConn *z;
|
||||||
|
|
||||||
if(addr == nil)
|
if(addr == nil)
|
||||||
addr = getenv("venti");
|
addr = getenv("venti");
|
||||||
|
|
@ -17,5 +18,8 @@ vtdial(char *addr)
|
||||||
if((fd = dial(na, nil, nil, nil)) < 0)
|
if((fd = dial(na, nil, nil, nil)) < 0)
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
return vtconn(fd, fd);
|
z = vtconn(fd, fd);
|
||||||
|
if(z)
|
||||||
|
strecpy(z->addr, z->addr+sizeof z->addr, na);
|
||||||
|
return z;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,13 @@ _vtsend(VtConn *z, Packet *p)
|
||||||
if(n == 0)
|
if(n == 0)
|
||||||
break;
|
break;
|
||||||
if(write(z->outfd, ioc.addr, ioc.len) < ioc.len){
|
if(write(z->outfd, ioc.addr, ioc.len) < ioc.len){
|
||||||
|
vtlog(VtServerLog, "%s: sending packet %p: %r", z->addr, p);
|
||||||
packetfree(p);
|
packetfree(p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
packetconsume(p, nil, ioc.len);
|
packetconsume(p, nil, ioc.len);
|
||||||
}
|
}
|
||||||
|
vtlog(VtServerLog, "%s: sent packet %p", z->addr, p);
|
||||||
packetfree(p);
|
packetfree(p);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -106,8 +108,10 @@ _vtrecv(VtConn *z)
|
||||||
ventirecvbytes += len;
|
ventirecvbytes += len;
|
||||||
ventirecvpackets++;
|
ventirecvpackets++;
|
||||||
p = packetsplit(p, len);
|
p = packetsplit(p, len);
|
||||||
|
vtlog(VtServerLog, "%s: read packet %p len %d", z->addr, p, len);
|
||||||
return p;
|
return p;
|
||||||
Err:
|
Err:
|
||||||
|
vtlog(VtServerLog, "%s: error reading packet: %r", z->addr);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ struct VtSrv
|
||||||
static void listenproc(void*);
|
static void listenproc(void*);
|
||||||
static void connproc(void*);
|
static void connproc(void*);
|
||||||
|
|
||||||
|
char *VtServerLog = "libventi/server";
|
||||||
|
|
||||||
static void
|
static void
|
||||||
scincref(VtSconn *sc)
|
scincref(VtSconn *sc)
|
||||||
{
|
{
|
||||||
|
|
@ -140,10 +142,12 @@ if(first && chattyventi){
|
||||||
while((p = vtrecv(c)) != nil){
|
while((p = vtrecv(c)) != nil){
|
||||||
r = vtmallocz(sizeof(VtReq));
|
r = vtmallocz(sizeof(VtReq));
|
||||||
if(vtfcallunpack(&r->tx, p) < 0){
|
if(vtfcallunpack(&r->tx, p) < 0){
|
||||||
packetfree(p);
|
vtlog(VtServerLog, "%s: recv bad packet %p: %r", c->addr, p);
|
||||||
fprint(2, "bad packet on %s: %r\n", sc->dir);
|
fprint(2, "bad packet on %s: %r\n", sc->dir);
|
||||||
|
packetfree(p);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
vtlog(VtServerLog, "%s: recv packet %p (%F)", c->addr, p, &r->tx);
|
||||||
if(chattyventi)
|
if(chattyventi)
|
||||||
fprint(2, "%s <- %F\n", argv0, &r->tx);
|
fprint(2, "%s <- %F\n", argv0, &r->tx);
|
||||||
packetfree(p);
|
packetfree(p);
|
||||||
|
|
@ -175,7 +179,11 @@ out:
|
||||||
VtReq*
|
VtReq*
|
||||||
vtgetreq(VtSrv *srv)
|
vtgetreq(VtSrv *srv)
|
||||||
{
|
{
|
||||||
return _vtqrecv(srv->q);
|
VtReq *r;
|
||||||
|
|
||||||
|
r = _vtqrecv(srv->q);
|
||||||
|
vtlog(VtServerLog, "%s: vtgetreq %F\n", ((VtSconn*)r->sc)->c->addr, &r->tx);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -192,11 +200,13 @@ vtrespond(VtReq *r)
|
||||||
if(chattyventi)
|
if(chattyventi)
|
||||||
fprint(2, "%s -> %F\n", argv0, &r->rx);
|
fprint(2, "%s -> %F\n", argv0, &r->rx);
|
||||||
if((p = vtfcallpack(&r->rx)) == nil){
|
if((p = vtfcallpack(&r->rx)) == nil){
|
||||||
|
vtlog(VtServerLog, "%s: vtfcallpack %F: %r", sc->c->addr, &r->rx);
|
||||||
fprint(2, "fcallpack on %s: %r\n", sc->dir);
|
fprint(2, "fcallpack on %s: %r\n", sc->dir);
|
||||||
packetfree(p);
|
packetfree(p);
|
||||||
vtfcallclear(&r->rx);
|
vtfcallclear(&r->rx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
vtlog(VtServerLog, "%s: send packet %p (%F)", sc->c->addr, p, &r->rx);
|
||||||
if(vtsend(sc->c, p) < 0)
|
if(vtsend(sc->c, p) < 0)
|
||||||
fprint(2, "vtsend %F: %r\n", &r->rx);
|
fprint(2, "vtsend %F: %r\n", &r->rx);
|
||||||
scdecref(sc);
|
scdecref(sc);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue