]> arthur.barton.de Git - ngircd-alex.git/blob - src/ngircd/ngircd.c
- Log-Meldungen an syslog angepasst.
[ngircd-alex.git] / src / ngircd / ngircd.c
1 /*
2  * ngIRCd -- The Next Generation IRC Daemon
3  * Copyright (c)2001 by Alexander Barton (alex@barton.de)
4  *
5  * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
6  * der GNU General Public License (GPL), wie von der Free Software Foundation
7  * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
8  * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
9  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
10  * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
11  *
12  * $Id: ngircd.c,v 1.6 2001/12/12 23:30:42 alex Exp $
13  *
14  * ngircd.c: Hier beginnt alles ;-)
15  *
16  * $Log: ngircd.c,v $
17  * Revision 1.6  2001/12/12 23:30:42  alex
18  * - Log-Meldungen an syslog angepasst.
19  * - NGIRCd_Quit ist nun das Flag zum Beenden des ngircd.
20  *
21  * Revision 1.5  2001/12/12 17:21:21  alex
22  * - mehr Unterfunktionen eingebaut, Modul besser strukturiert & dokumentiert.
23  * - Anpassungen an neue Module.
24  *
25  * Revision 1.4  2001/12/12 01:58:53  alex
26  * - Test auf socklen_t verbessert.
27  *
28  * Revision 1.3  2001/12/12 01:40:39  alex
29  * - ein paar mehr Kommentare; Variablennamen verstaendlicher gemacht.
30  * - fehlenden Header <arpa/inet.h> ergaenz.
31  * - SIGINT und SIGQUIT werden nun ebenfalls behandelt.
32  *
33  * Revision 1.2  2001/12/11 22:04:21  alex
34  * - Test auf stdint.h (HAVE_STDINT_H) hinzugefuegt.
35  *
36  * Revision 1.1.1.1  2001/12/11 21:53:04  alex
37  * Imported sources to CVS.
38  */
39
40
41 #define PORTAB_CHECK_TYPES              /* Prueffunktion einbinden, s.u. */
42
43
44 #include <portab.h>
45 #include "global.h"
46
47 #include <imp.h>
48
49 #include <assert.h>
50 #include <stdio.h>
51 #include <signal.h>
52
53 #include "conf.h"
54 #include "conn.h"
55 #include "log.h"
56
57 #include <exp.h>
58 #include "ngircd.h"
59
60
61 LOCAL VOID Initialize_Signal_Handler( VOID );
62 LOCAL VOID Signal_Handler( INT Signal );
63
64
65 GLOBAL INT main( INT argc, CONST CHAR *argv[] )
66 {
67         /* Datentypen der portab-Library ueberpruefen */
68         portab_check_types( );
69
70         /* Globale Variablen initialisieren */
71         NGIRCd_Quit = FALSE;
72
73         /* Module initialisieren */
74         Log_Init( );
75         Conf_Init( );
76         Conn_Init( );
77
78         Initialize_Signal_Handler( );
79         
80         if( ! Conn_New_Listener( 6668 )) exit( 1 );
81
82         
83         /* Hauptschleife */
84         while( ! NGIRCd_Quit )
85         {
86                 Conn_Handler( );
87         }
88         
89         /* Alles abmelden */
90         Conn_Exit( );
91         Conf_Exit( );
92         Log_Exit( );
93         
94         return 0;
95 } /* main */
96
97
98 LOCAL VOID Initialize_Signal_Handler( VOID )
99 {
100         /* Signal-Handler initialisieren: Strukturen anlegen und einhaengen :-) */
101
102         struct sigaction saction;
103
104         /* Signal-Struktur initialisieren */
105         memset( &saction, 0, sizeof( saction ));
106         saction.sa_handler = Signal_Handler;
107
108         /* Signal-Handler einhaengen */
109         sigaction( SIGALRM, &saction, NULL );
110         sigaction( SIGHUP, &saction, NULL);
111         sigaction( SIGINT, &saction, NULL );
112         sigaction( SIGQUIT, &saction, NULL );
113         sigaction( SIGTERM, &saction, NULL);
114         sigaction( SIGUSR1, &saction, NULL);
115         sigaction( SIGUSR2, &saction, NULL);
116 } /* Initialize_Signal_Handler */
117
118
119 LOCAL VOID Signal_Handler( INT Signal )
120 {
121         /* Signal-Handler. Dieser wird aufgerufen, wenn eines der Signale eintrifft,
122          * fuer das wir uns registriert haben (vgl. Initialize_Signal_Handler). Die
123          * Nummer des eingetroffenen Signals wird der Funktion uebergeben. */
124
125         switch( Signal )
126         {
127                 case SIGTERM:
128                 case SIGINT:
129                 case SIGQUIT:
130                         /* wir soll(t)en uns wohl beenden ... */
131                         Log( LOG_NOTICE, "Got signal %d, terminating now ...", Signal );
132                         NGIRCd_Quit = TRUE;
133                         break;
134                 default:
135                         /* unbekanntes bzw. unbehandeltes Signal */
136                         Log( LOG_NOTICE, "Got signal %d! Ignored.", Signal );
137         }
138 } /* Signal_Handler */
139
140
141 /* -eof- */