From 3ae464c26d46fd2f19c02002d3ed78050f40cb48 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 29 Aug 1997 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1997-08-29 --- ip/udp.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/ip/udp.c b/ip/udp.c index e2ff0d38015a82f00bbd4bbca54974e2e4d734f0..6da7d8ae3a69caa53c7873ef4c7bf33b501d4f53 100644 --- a/ip/udp.c +++ b/ip/udp.c @@ -317,6 +317,34 @@ udpctl(Conv *c, char **f, int n) return "unknown control request"; } +void +udpadvise(Block *bp, char *msg) +{ + Udphdr *h; + Ipaddr source, dest; + ushort psource, pdest; + Conv *s, **p; + + h = (Udphdr*)(bp->rp); + + dest = nhgetl(h->udpdst); + source = nhgetl(h->udpsrc); + psource = nhgets(h->udpsport); + pdest = nhgets(h->udpdport); + + /* Look for a connection */ + for(p = udp.conv; *p; p++) { + s = *p; + if(s->rport == pdest && s->lport == psource) + if(s->raddr == dest && s->laddr == source){ + qhangup(s->rq, msg); + qhangup(s->wq, msg); + break; + } + } + freeblist(bp); +} + void udpinit(Fs *fs) { @@ -329,6 +357,7 @@ udpinit(Fs *fs) udp.create = udpcreate; udp.close = udpclose; udp.rcv = udpiput; + udp.advise = udpadvise; udp.ipproto = IP_UDPPROTO; udp.nc = 16; udp.ptclsize = sizeof(Udpcb);