From f4ade537d550b872b7e86e6ffce940dfbad4c60c Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Tue, 11 Dec 2001 21:53:04 +0000 Subject: Initial revision --- src/Makefile.am | 13 +++++ src/ngircd/Makefile.am | 19 +++++++ src/ngircd/global.h | 31 ++++++++++ src/ngircd/log.c | 70 +++++++++++++++++++++++ src/ngircd/log.h | 43 ++++++++++++++ src/ngircd/ngircd.c | 150 +++++++++++++++++++++++++++++++++++++++++++++++++ src/ngircd/ngircd.h | 29 ++++++++++ src/ngircd/tool.c | 58 +++++++++++++++++++ src/ngircd/tool.h | 33 +++++++++++ 9 files changed, 446 insertions(+) create mode 100644 src/Makefile.am create mode 100644 src/ngircd/Makefile.am create mode 100644 src/ngircd/global.h create mode 100644 src/ngircd/log.c create mode 100644 src/ngircd/log.h create mode 100644 src/ngircd/ngircd.c create mode 100644 src/ngircd/ngircd.h create mode 100644 src/ngircd/tool.c create mode 100644 src/ngircd/tool.h (limited to 'src') 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 +#include "global.h" + +#include +#include +#include +#include + +#include +#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 +#include "global.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "log.h" + +#include +#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 +#include "global.h" + +#include +#include +#include +#include + +#include +#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- */ -- cgit 1.4.1