summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2001-12-11 21:53:04 +0000
committerAlexander Barton <alex@barton.de>2001-12-11 21:53:04 +0000
commitf4ade537d550b872b7e86e6ffce940dfbad4c60c (patch)
tree4930913c7110b4b174a7d167c9a97363e8caf891 /src
downloadngircd-f4ade537d550b872b7e86e6ffce940dfbad4c60c.tar.gz
ngircd-f4ade537d550b872b7e86e6ffce940dfbad4c60c.zip
Initial revision
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am13
-rw-r--r--src/ngircd/Makefile.am19
-rw-r--r--src/ngircd/global.h31
-rw-r--r--src/ngircd/log.c70
-rw-r--r--src/ngircd/log.h43
-rw-r--r--src/ngircd/ngircd.c150
-rw-r--r--src/ngircd/ngircd.h29
-rw-r--r--src/ngircd/tool.c58
-rw-r--r--src/ngircd/tool.h33
9 files changed, 446 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 00000000..24c7ea0a
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am,v 1.1 2001/12/11 21:53:04 alex Exp $
+
+# $Log: Makefile.am,v $
+# Revision 1.1  2001/12/11 21:53:04  alex
+# Initial revision
+#
+
+SUBDIRS = ngircd
+
+maintainer-clean-local:
+	rm -f Makefile Makefile.in config.h config.h.in stamp-h.in
+
+# -eof-
diff --git a/src/ngircd/Makefile.am b/src/ngircd/Makefile.am
new file mode 100644
index 00000000..c8936cf9
--- /dev/null
+++ b/src/ngircd/Makefile.am
@@ -0,0 +1,19 @@
+# $Id: Makefile.am,v 1.1 2001/12/11 21:53:04 alex Exp $
+
+# $Log: Makefile.am,v $
+# Revision 1.1  2001/12/11 21:53:04  alex
+# Initial revision
+#
+
+CFLAGS = -Wall
+
+sbin_PROGRAMS = ngircd
+
+ngircd_SOURCES = ngircd.c log.c tool.c
+
+noinst_HEADERS = ngircd.h log.h tool.h global.h
+
+maintainer-clean-local:
+	rm -f Makefile Makefile.in
+
+# -eof-
diff --git a/src/ngircd/global.h b/src/ngircd/global.h
new file mode 100644
index 00000000..5bb490f0
--- /dev/null
+++ b/src/ngircd/global.h
@@ -0,0 +1,31 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: global.h,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * global.h: Globaler Header, wir in jedes(!) Modul eingebunden.
+ *
+ * $Log: global.h,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#ifndef __global_h__
+#define __global_h__
+
+#include "config.h"
+
+#endif
+
+
+/* -eof- */
diff --git a/src/ngircd/log.c b/src/ngircd/log.c
new file mode 100644
index 00000000..d72b239b
--- /dev/null
+++ b/src/ngircd/log.c
@@ -0,0 +1,70 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: log.c,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * log.c: Logging-Funktionen
+ *
+ * $Log: log.c,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#define MAX_LOG_MSG_LEN 256
+
+
+#include <portab.h>
+#include "global.h"
+
+#include <imp.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#include <exp.h>
+#include "log.h"
+
+
+GLOBAL VOID Log_Init( VOID )
+{
+	Log( LOG_DEBUG, PACKAGE" version "VERSION" started.");
+} /* Log_Init */
+
+
+GLOBAL VOID Log_Exit( VOID )
+{
+	Log( LOG_DEBUG, PACKAGE" done.");
+} /* Log_Exit */
+
+
+GLOBAL VOID Log( CONST INT Level, CONST CHAR *Format, ... )
+{
+	/* Eintrag in Logfile(s) schreiben */
+
+	CHAR msg[MAX_LOG_MSG_LEN];
+	va_list ap;
+
+	assert( Format != NULL );
+
+	/* String mit variablen Argumenten zusammenbauen ... */
+	va_start( ap, Format );
+	vsnprintf( msg, MAX_LOG_MSG_LEN - 1, Format, ap );
+
+	/* ... und ausgeben */
+	printf( "%s\n", msg );
+
+	va_end( ap );
+} /* Log */
+
+
+/* -eof- */
diff --git a/src/ngircd/log.h b/src/ngircd/log.h
new file mode 100644
index 00000000..2b6622b9
--- /dev/null
+++ b/src/ngircd/log.h
@@ -0,0 +1,43 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: log.h,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * log.h: Logging-Funktionen (Header)
+ *
+ * $Log: log.h,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#ifndef __log_h__
+#define __log_h__
+
+
+#define LOG_DEBUG 4
+#define LOG_INFO 3
+#define LOG_WARN 2
+#define LOG_ERR 1
+#define LOG_FATAL 0
+
+
+GLOBAL VOID Log_Init( VOID );
+GLOBAL VOID Log_Exit( VOID );
+
+GLOBAL VOID Log( CONST INT Level, CONST CHAR *Format, ... );
+
+
+#endif
+
+
+/* -eof- */
diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c
new file mode 100644
index 00000000..80beaabb
--- /dev/null
+++ b/src/ngircd/ngircd.c
@@ -0,0 +1,150 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: ngircd.c,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * ngircd.c: Hier beginnt alles ;-)
+ *
+ * $Log: ngircd.c,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#define PORTAB_CHECK_TYPES
+
+#ifndef socklen_t
+#define socklen_t int
+#endif
+
+#include <portab.h>
+#include "global.h"
+
+#include <imp.h>
+#include <assert.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h> 
+#include <sys/socket.h> 
+#include <unistd.h>
+#include <netinet/in.h>
+      
+#include "log.h"
+
+#include <exp.h>
+#include "ngircd.h"
+
+
+BOOLEAN do_quit_now = FALSE;
+
+
+LOCAL VOID Signal_Handler( INT Signal );
+
+
+GLOBAL INT main( INT argc, CONST CHAR *argv[] )
+{
+	FILE *fd;
+	struct sigaction saction;
+	struct sockaddr_in my_sock, a_sock;
+	int my_sock_hndl;
+	int a_sock_len, a_hndl;
+
+	portab_check_types( );
+
+	Log_Init( );
+	
+	/* Signal-Handler initialisieren */
+	memset( &saction, 0, sizeof( saction ));
+	saction.sa_handler = Signal_Handler;
+
+	/* Signal-Handler einhaengen */
+	sigaction( SIGHUP, &saction, NULL);
+	sigaction( SIGTERM, &saction, NULL);
+	sigaction( SIGUSR1, &saction, NULL);
+	sigaction( SIGUSR2, &saction, NULL);
+	
+	/* Server-"Listen"-Socket initialisieren */
+	memset( &my_sock, 0, sizeof( my_sock ));
+	my_sock.sin_family = AF_INET;
+	my_sock.sin_port = htons( 6668 );
+	my_sock.sin_addr.s_addr = htonl( INADDR_ANY );
+
+	/* Socket erzeugen, ... */
+	my_sock_hndl = socket( AF_INET, SOCK_STREAM, 0);
+	if( socket < 0 )
+	{
+		Log( LOG_FATAL, "Can't create socket: %s", strerror( errno ));
+		exit( 1 );
+	}
+	
+	/* ... an Port binden ... */
+	if( bind( my_sock_hndl, (struct sockaddr *)&my_sock, (socklen_t)sizeof( my_sock )) < 0 )
+	{
+		Log( LOG_FATAL, "Can't bind socket: %s", strerror( errno ));
+		exit( 1 );
+	}
+
+	/* ... und in "listen mode" gehen :-) */
+	if( listen( my_sock_hndl, 4 ) < 0 )
+	{
+		Log( LOG_FATAL, "Can't listen on soecket: %s", strerror( errno ));
+		exit( 1 );
+	}
+	
+	/* Hauptschleife */
+	while( ! do_quit_now )
+	{
+		/* auf Verbindung warten */
+		a_sock_len = sizeof( a_sock );
+		memset( &a_sock, 0, a_sock_len );
+		a_hndl = accept( my_sock_hndl, (struct sockaddr *)&a_sock, &a_sock_len );
+		if( a_hndl < 0 )
+		{
+			if( errno == EINTR ) continue;
+			
+			Log( LOG_FATAL, "Can't accept connection: %s", strerror( errno ));
+			exit( 1 );
+		}
+		Log( LOG_INFO, "Accepted connection from %s:%d (handle %d).", inet_ntoa( a_sock.sin_addr ), ntohs( a_sock.sin_port), a_hndl );
+		fd = fdopen( a_hndl, "w" );
+
+		fputs( "hello world!\n", fd ); fflush( fd );
+		
+		fclose( fd );
+		close( a_hndl );
+        }
+        
+        /* Aufraeumen (Sockets etc.!?) */
+
+	Log_Exit( );
+	return 0;
+} /* main */
+
+
+LOCAL VOID Signal_Handler( INT Signal )
+{
+	switch( Signal )
+	{
+		case SIGTERM:
+			Log( LOG_WARN, "Got SIGTERM, terminating now ..." );
+			do_quit_now = TRUE;
+			break;
+		default:
+			Log( LOG_WARN, "Got signal %d! I'll ignore it.", Signal );
+	}
+} /* Signal_Handler */
+
+
+/* -eof- */
diff --git a/src/ngircd/ngircd.h b/src/ngircd/ngircd.h
new file mode 100644
index 00000000..8844adbc
--- /dev/null
+++ b/src/ngircd/ngircd.h
@@ -0,0 +1,29 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: ngircd.h,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * ngircd.h: Prototypen aus dem "Haupt-Modul"
+ *
+ * $Log: ngircd.h,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#ifndef __ngircd_h__
+#define __ngircd_h__
+
+#endif
+
+
+/* -eof- */
diff --git a/src/ngircd/tool.c b/src/ngircd/tool.c
new file mode 100644
index 00000000..c16b0b9f
--- /dev/null
+++ b/src/ngircd/tool.c
@@ -0,0 +1,58 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: tool.c,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * tool.c: Hilfsfunktionen, ggf. Platformabhaengig
+ *
+ * $Log: tool.c,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#include <portab.h>
+#include "global.h"
+
+#include <imp.h>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <exp.h>
+#include "log.h"
+
+
+GLOBAL VOID Trim_Str( CHAR *String )
+{
+	/* Mit Trim_Str() werden fuehrende und folgende Leerzeichen, Tabulatoren
+	 * und Zeilenumbrueche (ASCII 10 und ASCII 13) aus dem String entfernt. */
+	
+	CHAR *start, *ptr;
+
+	assert( String != NULL );
+
+	start = String;
+	
+	/* Zeichen am Anfang pruefen ... */
+	while(( *start == ' ' ) || ( *start == 9 )) start++;
+	
+	/* Zeichen am Ende pruefen ... */
+	ptr = strchr( start, '\0' ) - 1;
+	while(( *ptr == ' ' ) || ( *ptr == 9 ) || ( *ptr == 10 ) || ( *ptr == 13 )) ptr--;
+	*(++ptr) = '\0';
+
+	memmove( String, start, strlen( start ) + 1 );
+} /* Trim_Str */
+
+
+/* -eof- */
diff --git a/src/ngircd/tool.h b/src/ngircd/tool.h
new file mode 100644
index 00000000..2f261467
--- /dev/null
+++ b/src/ngircd/tool.h
@@ -0,0 +1,33 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2001 by Alexander Barton (alex@barton.de)
+ *
+ * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
+ * der GNU General Public License (GPL), wie von der Free Software Foundation
+ * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
+ * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
+ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
+ * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
+ *
+ * $Id: tool.h,v 1.1 2001/12/11 21:53:04 alex Exp $
+ *
+ * log.h: Hilfsfunktionen (Header)
+ *
+ * $Log: tool.h,v $
+ * Revision 1.1  2001/12/11 21:53:04  alex
+ * Initial revision
+ *
+ */
+
+
+#ifndef __tool_h__
+#define __tool_h__
+
+
+GLOBAL VOID Trim_Str( CHAR *String );
+
+
+#endif
+
+
+/* -eof- */