1 551445b9 2004-04-21 devnull #include <u.h>
2 551445b9 2004-04-21 devnull #include <libc.h>
3 4c06b8ee 2005-05-19 devnull #include <ip.h>
4 551445b9 2004-04-21 devnull #include <thread.h>
5 551445b9 2004-04-21 devnull #include <sunrpc.h>
7 551445b9 2004-04-21 devnull typedef struct Arg Arg;
8 551445b9 2004-04-21 devnull struct Arg
11 551445b9 2004-04-21 devnull char adir[40];
12 551445b9 2004-04-21 devnull SunSrv *srv;
15 551445b9 2004-04-21 devnull static void
16 551445b9 2004-04-21 devnull sunnetlisten(void *v)
18 551445b9 2004-04-21 devnull int fd, lcfd;
19 551445b9 2004-04-21 devnull char ldir[40];
20 4c06b8ee 2005-05-19 devnull uchar ip[IPaddrlen];
21 4c06b8ee 2005-05-19 devnull int port;
22 551445b9 2004-04-21 devnull Arg *a = v;
23 4c06b8ee 2005-05-19 devnull NetConnInfo *nci;
26 551445b9 2004-04-21 devnull lcfd = listen(a->adir, ldir);
27 551445b9 2004-04-21 devnull if(lcfd < 0)
29 551445b9 2004-04-21 devnull fd = accept(lcfd, ldir);
30 551445b9 2004-04-21 devnull close(lcfd);
31 551445b9 2004-04-21 devnull if(fd < 0)
32 551445b9 2004-04-21 devnull continue;
33 4c06b8ee 2005-05-19 devnull if(a->srv->ipokay){
34 4c06b8ee 2005-05-19 devnull if((nci = getnetconninfo(nil, fd)) == nil){
35 4c06b8ee 2005-05-19 devnull close(fd);
36 4c06b8ee 2005-05-19 devnull continue;
38 4c06b8ee 2005-05-19 devnull port = atoi(nci->rserv);
39 4c06b8ee 2005-05-19 devnull parseip(ip, nci->raddr);
40 4c06b8ee 2005-05-19 devnull freenetconninfo(nci);
41 4c06b8ee 2005-05-19 devnull if(!a->srv->ipokay(ip, port)){
42 4c06b8ee 2005-05-19 devnull close(fd);
43 4c06b8ee 2005-05-19 devnull continue;
46 551445b9 2004-04-21 devnull if(!sunsrvfd(a->srv, fd))
47 551445b9 2004-04-21 devnull close(fd);
50 551445b9 2004-04-21 devnull close(a->fd);
54 551445b9 2004-04-21 devnull sunsrvnet(SunSrv *srv, char *addr)
58 551445b9 2004-04-21 devnull a = emalloc(sizeof(Arg));
59 551445b9 2004-04-21 devnull if((a->fd = announce(addr, a->adir)) < 0)
60 551445b9 2004-04-21 devnull return -1;
61 551445b9 2004-04-21 devnull a->srv = srv;
63 551445b9 2004-04-21 devnull proccreate(sunnetlisten, a, SunStackSize);
64 551445b9 2004-04-21 devnull return 0;
68 551445b9 2004-04-21 devnull sunsrvannounce(SunSrv *srv, char *addr)
70 551445b9 2004-04-21 devnull if(strstr(addr, "udp!"))
71 551445b9 2004-04-21 devnull return sunsrvudp(srv, addr);
73 551445b9 2004-04-21 devnull return sunsrvnet(srv, addr);