]> arthur.barton.de Git - ngircd-alex.git/blob - src/ngircd/ngircd.c
- mehr Unterfunktionen eingebaut, Modul besser strukturiert & dokumentiert.
[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.5 2001/12/12 17:21:21 alex Exp $
13  *
14  * ngircd.c: Hier beginnt alles ;-)
15  *
16  * $Log: ngircd.c,v $
17  * Revision 1.5  2001/12/12 17:21:21  alex
18  * - mehr Unterfunktionen eingebaut, Modul besser strukturiert & dokumentiert.
19  * - Anpassungen an neue Module.
20  *
21  * Revision 1.4  2001/12/12 01:58:53  alex
22  * - Test auf socklen_t verbessert.
23  *
24  * Revision 1.3  2001/12/12 01:40:39  alex
25  * - ein paar mehr Kommentare; Variablennamen verstaendlicher gemacht.
26  * - fehlenden Header <arpa/inet.h> ergaenz.
27  * - SIGINT und SIGQUIT werden nun ebenfalls behandelt.
28  *
29  * Revision 1.2  2001/12/11 22:04:21  alex
30  * - Test auf stdint.h (HAVE_STDINT_H) hinzugefuegt.
31  *
32  * Revision 1.1.1.1  2001/12/11 21:53:04  alex
33  * Imported sources to CVS.
34  */
35
36
37 #define PORTAB_CHECK_TYPES              /* Prueffunktion einbinden, s.u. */
38
39
40 #include <portab.h>
41 #include "global.h"
42
43 #include <imp.h>
44
45 #include <assert.h>
46 #include <stdio.h>
47 #include <signal.h>
48
49 #include "conf.h"
50 #include "conn.h"
51 #include "log.h"
52
53 #include <exp.h>
54 #include "ngircd.h"
55
56
57 BOOLEAN do_quit_now = FALSE;            /* TRUE: Hauptschleife beenden */
58
59
60 LOCAL VOID Initialize_Signal_Handler( VOID );
61 LOCAL VOID Signal_Handler( INT Signal );
62
63
64 GLOBAL INT main( INT argc, CONST CHAR *argv[] )
65 {
66         /* Datentypen der portab-Library ueberpruefen */
67         portab_check_types( );
68
69         /* Module initialisieren */
70         Log_Init( );
71         Conf_Init( );
72         Conn_Init( );
73
74         Initialize_Signal_Handler( );
75         
76         if( ! Conn_New_Listener( 6668 )) exit( 1 );
77
78         
79         /* Hauptschleife */
80         while( ! do_quit_now )
81         {
82                 Conn_Handler( );
83         }
84         
85         /* Alles abmelden */
86         Conn_Exit( );
87         Conf_Exit( );
88         Log_Exit( );
89         
90         return 0;
91 } /* main */
92
93
94 LOCAL VOID Initialize_Signal_Handler( VOID )
95 {
96         /* Signal-Handler initialisieren: Strukturen anlegen und einhaengen :-) */
97
98         struct sigaction saction;
99
100         /* Signal-Struktur initialisieren */
101         memset( &saction, 0, sizeof( saction ));
102         saction.sa_handler = Signal_Handler;
103
104         /* Signal-Handler einhaengen */
105         sigaction( SIGALRM, &saction, NULL );
106         sigaction( SIGHUP, &saction, NULL);
107         sigaction( SIGINT, &saction, NULL );
108         sigaction( SIGQUIT, &saction, NULL );
109         sigaction( SIGTERM, &saction, NULL);
110         sigaction( SIGUSR1, &saction, NULL);
111         sigaction( SIGUSR2, &saction, NULL);
112 } /* Initialize_Signal_Handler */
113
114
115 LOCAL VOID Signal_Handler( INT Signal )
116 {
117         /* Signal-Handler. Dieser wird aufgerufen, wenn eines der Signale eintrifft,
118          * fuer das wir uns registriert haben (vgl. Initialize_Signal_Handler). Die
119          * Nummer des eingetroffenen Signals wird der Funktion uebergeben. */
120
121         switch( Signal )
122         {
123                 case SIGTERM:
124                 case SIGINT:
125                 case SIGQUIT:
126                         /* wir soll(t)en uns wohl beenden ... */
127                         Log( LOG_WARN, "Got signal %d, terminating now ...", Signal );
128                         do_quit_now = TRUE;
129                         break;
130                 default:
131                         /* unbekanntes bzw. unbehandeltes Signal */
132                         Log( LOG_WARN, "Got signal %d! Ignored.", Signal );
133         }
134 } /* Signal_Handler */
135
136
137 /* -eof- */