aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ndb/dnudpserver.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-02-14 19:43:19 +0000
committerrsc <devnull@localhost>2006-02-14 19:43:19 +0000
commit5c9f76b5e5dc5c0537896b0e487b101dad38a746 (patch)
treedfee973b76db00b0e011610298ca13c5a997e1c9 /src/cmd/ndb/dnudpserver.c
parent54357361fbc3032b36688bb4c1d4ced1f14f08f6 (diff)
downloadplan9port-5c9f76b5e5dc5c0537896b0e487b101dad38a746.tar.gz
plan9port-5c9f76b5e5dc5c0537896b0e487b101dad38a746.tar.bz2
plan9port-5c9f76b5e5dc5c0537896b0e487b101dad38a746.zip
remove unused
Diffstat (limited to 'src/cmd/ndb/dnudpserver.c')
-rwxr-xr-xsrc/cmd/ndb/dnudpserver.c87
1 files changed, 33 insertions, 54 deletions
diff --git a/src/cmd/ndb/dnudpserver.c b/src/cmd/ndb/dnudpserver.c
index f0ed37cd..d3eaf958 100755
--- a/src/cmd/ndb/dnudpserver.c
+++ b/src/cmd/ndb/dnudpserver.c
@@ -3,6 +3,7 @@
#include <ip.h>
#include <bio.h>
#include <ndb.h>
+#include <thread.h>
#include "dns.h"
static int udpannounce(char*);
@@ -10,21 +11,11 @@ static void reply(int, uchar*, DNSmsg*, Request*);
extern char *logfile;
-static void
-ding(void *x, char *msg)
-{
- USED(x);
- if(strcmp(msg, "alarm") == 0)
- noted(NCONT);
- else
- noted(NDFLT);
-}
-
typedef struct Inprogress Inprogress;
struct Inprogress
{
int inuse;
- OUdphdr uh;
+ Udphdr uh;
DN *owner;
int type;
int id;
@@ -33,15 +24,15 @@ Inprogress inprog[Maxactive+2];
/*
* record client id and ignore retransmissions.
- * we're still single thread at this point.
+ * we're still single thread at this point. BUG
*/
static Inprogress*
clientrxmit(DNSmsg *req, uchar *buf)
{
Inprogress *p, *empty;
- OUdphdr *uh;
+ Udphdr *uh;
- uh = (OUdphdr *)buf;
+ uh = (Udphdr *)buf;
empty = 0;
for(p = inprog; p < &inprog[Maxactive]; p++){
if(p->inuse == 0){
@@ -52,7 +43,7 @@ clientrxmit(DNSmsg *req, uchar *buf)
if(req->id == p->id)
if(req->qd->owner == p->owner)
if(req->qd->type == p->type)
- if(memcmp(uh, &p->uh, OUdphdrsize) == 0)
+ if(memcmp(uh, &p->uh, Udphdrsize) == 0)
return 0;
}
if(empty == 0)
@@ -61,7 +52,7 @@ clientrxmit(DNSmsg *req, uchar *buf)
empty->id = req->id;
empty->owner = req->qd->owner;
empty->type = req->qd->type;
- memmove(&empty->uh, uh, OUdphdrsize);
+ memmove(&empty->uh, uh, Udphdrsize);
empty->inuse = 1;
return empty;
}
@@ -69,52 +60,33 @@ clientrxmit(DNSmsg *req, uchar *buf)
/*
* a process to act as a dns server for outside reqeusts
*/
-void
-dnudpserver(char *mntpt)
+static void
+udpproc(void *v)
{
int fd, len, op;
Request req;
DNSmsg reqmsg, repmsg;
- uchar buf[OUdphdrsize + Maxudp + 1024];
+ uchar buf[Udphdrsize + Maxudp + 1024];
char *err;
Inprogress *p;
char tname[32];
- OUdphdr *uh;
-
- /* fork sharing text, data, and bss with parent */
- switch(rfork(RFPROC|RFNOTEG|RFMEM|RFNOWAIT)){
- case -1:
- break;
- case 0:
- break;
- default:
- return;
- }
+ Udphdr *uh;
- fd = -1;
- notify(ding);
-restart:
- if(fd >= 0)
- close(fd);
- while((fd = udpannounce(mntpt)) < 0)
- sleep(5000);
- if(setjmp(req.mret))
- putactivity();
- req.isslave = 0;
+ fd = (int)v;
/* loop on requests */
for(;; putactivity()){
memset(&repmsg, 0, sizeof(repmsg));
memset(&reqmsg, 0, sizeof(reqmsg));
alarm(60*1000);
- len = udpread(fd, (OUdphdr*)buf, buf+OUdphdrsize, sizeof(buf)-OUdphdrsize);
+ len = udpread(fd, (Udphdr*)buf, buf+Udphdrsize, sizeof(buf)-Udphdrsize);
alarm(0);
if(len <= 0)
- goto restart;
- uh = (OUdphdr*)buf;
+ continue;
+ uh = (Udphdr*)buf;
getactivity(&req);
req.aborttime = now + 30; /* don't spend more than 30 seconds */
- err = convM2DNS(&buf[OUdphdrsize], len, &reqmsg);
+ err = convM2DNS(&buf[Udphdrsize], len, &reqmsg);
if(err){
syslog(0, logfile, "server: input error: %s from %I", err, buf);
continue;
@@ -173,12 +145,6 @@ freereq:
rrfreelist(reqmsg.an);
rrfreelist(reqmsg.ns);
rrfreelist(reqmsg.ar);
-
- if(req.isslave){
- putactivity();
- _exits(0);
- }
-
}
}
@@ -192,8 +158,9 @@ udpannounce(char *mntpt)
char buf[40];
USED(mntpt);
-
- if((fd=announce("udp!*!nameserver", buf)) < 0)
+
+ snprint(buf, sizeof buf, "udp!*!%s", portname);
+ if((fd=announce(buf, buf)) < 0)
warning("can't announce on dns udp port");
return fd;
}
@@ -211,7 +178,7 @@ reply(int fd, uchar *buf, DNSmsg *rep, Request *reqp)
rep->id, rep->qd->owner->name,
rrname(rep->qd->type, tname, sizeof tname), rep->an, rep->ns, rep->ar);
- len = convDNS2M(rep, &buf[OUdphdrsize], Maxudp);
+ len = convDNS2M(rep, &buf[Udphdrsize], Maxudp);
if(len <= 0){
syslog(0, logfile, "error converting reply: %s %d", rep->qd->owner->name,
rep->qd->type);
@@ -223,6 +190,18 @@ reply(int fd, uchar *buf, DNSmsg *rep, Request *reqp)
syslog(0, logfile, "ar %R", rp);
return;
}
- if(udpwrite(fd, (OUdphdr*)buf, buf+OUdphdrsize, len) != len)
+ if(udpwrite(fd, (Udphdr*)buf, buf+Udphdrsize, len) != len)
syslog(0, logfile, "error sending reply: %r");
}
+
+void
+dnudpserver(void *v)
+{
+ int i, fd;
+
+ while((fd = udpannounce(v)) < 0)
+ sleep(5*1000);
+ for(i=0; i<Maxactive; i++)
+ proccreate(udpproc, (void*)fd, STACK);
+}
+