tmuck2.4/
tmuck2.4/admin/scripts/
tmuck2.4/docs/
tmuck2.4/minimal-db/
tmuck2.4/minimal-db/data/
tmuck2.4/minimal-db/logs/
tmuck2.4/minimal-db/muf/
tmuck2.4/old/
tmuck2.4/src/
tmuck2.4/src/compile/
tmuck2.4/src/editor/
tmuck2.4/src/game/
tmuck2.4/src/interface/
tmuck2.4/src/scripts/
tmuck2.4/src/utilprogs/
/*
	Dumb announcer.  Courtesy Andrew Molitor.

*/

#include <stdio.h>
#include <syslog.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <ctype.h>
#include <string.h>


main(ac, av)
int	ac;
char	*av[];
{
	struct sockaddr_in	s, remote;
	int			opt;
	int			fd, newfd;
	int			remotesiz;
	int			retval;
	FILE			*netw, *datafile;
	char			filename[256], buff[512];
	unsigned short		port;
	unsigned int		clientIp, clientPort;

	switch(ac) {
	case 2:
		port = 3333;
		break;
	case 3:
		port = atoi(av[2]);
		break;
	default:
		fprintf(stderr, "Usage: %s filename [ portnum ]\n", av[0]);
		exit(-1);
		break;
	}

	strcpy(filename, av[1]);

	s.sin_family = AF_INET;
	s.sin_port = htons(port);
	s.sin_addr.s_addr = INADDR_ANY;

	fd = socket(PF_INET, SOCK_STREAM, 0);
	if(fd < 0) {
		perror("socket");
		exit(-1);
	}

	opt = 1;
	if(setsockopt(
		fd, SOL_SOCKET, SO_REUSEADDR, (char *) &opt, sizeof(opt)) < 0){
		perror("setsockopt");
		exit(-1);
	}

	if(bind(fd, &s, sizeof(s)) < 0) {
		perror("bind");
		exit(-1);
	}

	if(listen(fd, 5) < 0) {
		perror("listen");
		exit(-1);
	}

	while(1) {
		remotesiz = sizeof(remote);
		newfd = accept(fd, &remote, &remotesiz);
		if(newfd < 0) {
			perror("accept");
			sleep(1);
			continue;
		}
		clientPort = remote.sin_port;

		netw = fdopen(newfd, "w");
		if(netw == NULL) {
			perror("fdopen");
			fclose(netw);
			close(newfd);
			sleep(1);
			continue;
		}

		fprintf(netw, "Hi, %s/%d.\n", inet_ntoa(remote.sin_addr),
			clientPort);
		fflush(netw);

		datafile = fopen(filename, "r");
		if(datafile == NULL) {
			fprintf(netw, "Ooops. No info. Sorry!\n");
		} else {
			while(fgets(buff, 512, datafile)) {
				fputs(buff, netw);
				fflush(netw);
			}
			fclose(netw);
			fclose(datafile);
		}
	}
}