19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier
49a747e4fSDavid du Colombier void
hogport(char * proto,int port)59a747e4fSDavid du Colombier hogport(char *proto, int port)
69a747e4fSDavid du Colombier {
79a747e4fSDavid du Colombier char buf[256];
89a747e4fSDavid du Colombier char dir[40];
99a747e4fSDavid du Colombier
109a747e4fSDavid du Colombier snprint(buf, sizeof(buf), "%s!%d", proto, port);
119a747e4fSDavid du Colombier if(announce(buf, dir) < 0)
129a747e4fSDavid du Colombier fprint(2, "%s: can't hog %s\n", argv0, buf);
139a747e4fSDavid du Colombier }
149a747e4fSDavid du Colombier
159a747e4fSDavid du Colombier void
hogrange(char * str)169a747e4fSDavid du Colombier hogrange(char *str)
179a747e4fSDavid du Colombier {
189a747e4fSDavid du Colombier char *er, *sr;
199a747e4fSDavid du Colombier int start, end;
209a747e4fSDavid du Colombier
219a747e4fSDavid du Colombier sr = strrchr(str, '!');
229a747e4fSDavid du Colombier if(sr == nil)
239a747e4fSDavid du Colombier sysfatal("bad range: %s", str);
249a747e4fSDavid du Colombier *sr++ = 0;
259a747e4fSDavid du Colombier
269a747e4fSDavid du Colombier er = strchr(sr, '-');
279a747e4fSDavid du Colombier if(er == nil)
289a747e4fSDavid du Colombier er = sr;
299a747e4fSDavid du Colombier else
309a747e4fSDavid du Colombier er++;
319a747e4fSDavid du Colombier
329a747e4fSDavid du Colombier start = atoi(sr);
339a747e4fSDavid du Colombier end = atoi(er);
349a747e4fSDavid du Colombier if(end < start)
359a747e4fSDavid du Colombier sysfatal("bad range: %s", sr);
369a747e4fSDavid du Colombier
379a747e4fSDavid du Colombier for(; start <= end; start++)
389a747e4fSDavid du Colombier hogport(str, start);
399a747e4fSDavid du Colombier }
409a747e4fSDavid du Colombier
419a747e4fSDavid du Colombier void
main(int argc,char ** argv)429a747e4fSDavid du Colombier main(int argc, char **argv)
439a747e4fSDavid du Colombier {
449a747e4fSDavid du Colombier int i;
459a747e4fSDavid du Colombier
469a747e4fSDavid du Colombier ARGBEGIN{
479a747e4fSDavid du Colombier }ARGEND;
489a747e4fSDavid du Colombier
499a747e4fSDavid du Colombier if(argc == 0){
50*b59479fcSDavid du Colombier fprint(2, "usage: %s portrange\n", argv0);
519a747e4fSDavid du Colombier exits("usage");
529a747e4fSDavid du Colombier }
539a747e4fSDavid du Colombier
549a747e4fSDavid du Colombier switch(rfork(RFREND|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
559a747e4fSDavid du Colombier case 0:
569a747e4fSDavid du Colombier close(0);
579a747e4fSDavid du Colombier close(1);
589a747e4fSDavid du Colombier break;
599a747e4fSDavid du Colombier case -1:
609a747e4fSDavid du Colombier abort(); /* "fork failed\n" */;
619a747e4fSDavid du Colombier default:
629a747e4fSDavid du Colombier _exits(0);
639a747e4fSDavid du Colombier }
649a747e4fSDavid du Colombier
659a747e4fSDavid du Colombier for(i = 0; i < argc; i++)
669a747e4fSDavid du Colombier hogrange(argv[i]);
679a747e4fSDavid du Colombier
689a747e4fSDavid du Colombier close(2);
699a747e4fSDavid du Colombier for(;;)
709a747e4fSDavid du Colombier sleep(10000);
719a747e4fSDavid du Colombier }
72