- Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
authorAlexander Barton <alex@barton.de>
Mon, 11 Mar 2002 22:04:10 +0000 (22:04 +0000)
committerAlexander Barton <alex@barton.de>
Mon, 11 Mar 2002 22:04:10 +0000 (22:04 +0000)
src/ngircd/client.c
src/ngircd/client.h
src/ngircd/conn.c
src/ngircd/irc-login.c
src/ngircd/irc-server.c

index 917b230eb74edcc9be73d8518476d6cd1edb1a18..6bbbd26f2f96dcb6ec0dd55885a57feae90c7d20 100644 (file)
@@ -9,7 +9,7 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: client.c,v 1.46 2002/03/10 22:03:20 alex Exp $
+ * $Id: client.c,v 1.47 2002/03/11 22:04:10 alex Exp $
  *
  * client.c: Management aller Clients
  *
@@ -21,6 +21,9 @@
  * Server gewesen, so existiert eine entsprechende CONNECTION-Struktur.
  *
  * $Log: client.c,v $
+ * Revision 1.47  2002/03/11 22:04:10  alex
+ * - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
+ *
  * Revision 1.46  2002/03/10 22:03:20  alex
  * - Netz-Splits werden nun als soche ausgegeben.
  *
@@ -244,7 +247,7 @@ GLOBAL VOID Client_Exit( VOID )
        CLIENT *c, *next;
        INT cnt;
 
-       Client_Destroy( This_Server, "Server going down.", NULL );
+       Client_Destroy( This_Server, "Server going down.", NULL, FALSE );
        
        cnt = 0;
        c = My_Clients;
@@ -322,7 +325,7 @@ GLOBAL CLIENT *Client_New( CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer, I
 } /* Client_New */
 
 
-GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg )
+GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN SendQuit )
 {
        /* Client entfernen. */
        
@@ -349,7 +352,7 @@ GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg )
                {
                        /* der Client, der geloescht wird ist ein Server. Der Client, den wir gerade
                         * pruefen, ist ein Child von diesem und muss daher auch entfernt werden */
-                       Client_Destroy( c, NULL, msg);
+                       Client_Destroy( c, NULL, msg, FALSE );
                        last = NULL;
                        c = My_Clients;
                        continue;
@@ -364,21 +367,29 @@ GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg )
                        {
                                if( c->conn_id != NONE )
                                {
-                                       /* Ein lokaler User. Alle andere Server informieren! */
+                                       /* Ein lokaler User */
                                        Log( LOG_NOTICE, "User \"%s\" unregistered (connection %d): %s", Client_Mask( c ), c->conn_id, txt );
 
-                                       if( FwdMsg ) IRC_WriteStrServersPrefix( NULL, c, "QUIT :%s", FwdMsg );
-                                       else IRC_WriteStrServersPrefix( NULL, c, "QUIT :" );
+                                       if( SendQuit )
+                                       {
+                                               /* Alle andere Server informieren! */
+                                               if( FwdMsg ) IRC_WriteStrServersPrefix( NULL, c, "QUIT :%s", FwdMsg );
+                                               else IRC_WriteStrServersPrefix( NULL, c, "QUIT :" );
+                                       }
                                }
                                else
                                {
-                                       /* Remote User. Andere Server informieren, ausser denen,
-                                        * die "in Richtung dem liegen", auf dem der User registriert
-                                        * ist. Von denen haben wir das QUIT ja wohl bekommen. */
+                                       /* Remote User */
                                        Log( LOG_DEBUG, "User \"%s\" unregistered: %s", Client_Mask( c ), txt );
-                                       
-                                       if( FwdMsg ) IRC_WriteStrServersPrefix( Client_NextHop( c ), c, "QUIT :%s", FwdMsg );
-                                       else IRC_WriteStrServersPrefix( Client_NextHop( c ), c, "QUIT :" );
+
+                                       if( SendQuit )
+                                       {
+                                               /* Andere Server informieren, ausser denen, die "in
+                                                * Richtung dem liegen", auf dem der User registriert
+                                                * ist. Von denen haben wir das QUIT ja wohl bekommen. */
+                                               if( FwdMsg ) IRC_WriteStrServersPrefix( Client_NextHop( c ), c, "QUIT :%s", FwdMsg );
+                                               else IRC_WriteStrServersPrefix( Client_NextHop( c ), c, "QUIT :" );
+                                       }
                                }
                                Channel_RemoveClient( c, FwdMsg ? FwdMsg : c->id );
                        }
index 3edc10c334a19325ff029cd52d2ca02f474cf974..68f827c02363acbab33583e9bdcbcacc01a920a8 100644 (file)
@@ -9,11 +9,14 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: client.h,v 1.23 2002/02/27 18:22:09 alex Exp $
+ * $Id: client.h,v 1.24 2002/03/11 22:04:10 alex Exp $
  *
  * client.h: Konfiguration des ngircd (Header)
  *
  * $Log: client.h,v $
+ * Revision 1.24  2002/03/11 22:04:10  alex
+ * - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
+ *
  * Revision 1.23  2002/02/27 18:22:09  alex
  * - neue Funktion Client_SetAway() und Client_Away() implementiert.
  *
@@ -143,7 +146,7 @@ GLOBAL CLIENT *Client_NewRemoteServer( CLIENT *Introducer, CHAR *Hostname, CLIEN
 GLOBAL CLIENT *Client_NewRemoteUser( CLIENT *Introducer, CHAR *Nick, INT Hops, CHAR *User, CHAR *Hostname, INT Token, CHAR *Modes, CHAR *Info, BOOLEAN Idented );
 GLOBAL CLIENT *Client_New( CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer, INT Type, CHAR *ID, CHAR *User, CHAR *Hostname, CHAR *Info, INT Hops, INT Token, CHAR *Modes, BOOLEAN Idented );
 
-GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg );
+GLOBAL VOID Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN SendQuit );
 
 GLOBAL CLIENT *Client_ThisServer( VOID );
 
index 36a33dacac80606aa852072ff5f7806dd16e0cb4..7dede7098db5c4bda65883ca40061e9a3db288df 100644 (file)
@@ -9,11 +9,14 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: conn.c,v 1.50 2002/03/11 00:04:48 alex Exp $
+ * $Id: conn.c,v 1.51 2002/03/11 22:04:10 alex Exp $
  *
  * connect.h: Verwaltung aller Netz-Verbindungen ("connections")
  *
  * $Log: conn.c,v $
+ * Revision 1.51  2002/03/11 22:04:10  alex
+ * - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
+ *
  * Revision 1.50  2002/03/11 00:04:48  alex
  * - ein sofortiger Re-Connect wird nur dann versucht, wenn die Vernindung
  *   "lange genug" bereits bestanden hatte.
@@ -591,7 +594,7 @@ GLOBAL VOID Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformC
        }
 
        c = Client_GetFromConn( Idx );
-       if( c ) Client_Destroy( c, LogMsg, FwdMsg );
+       if( c ) Client_Destroy( c, LogMsg, FwdMsg, TRUE );
 
        if( My_Connections[Idx].res_stat )
        {
index 3898d4b17cc611fd5638452b35725f0359afd459..9d1c96df2041281fd9f91eecc21c5a26744ce2cf 100644 (file)
@@ -9,11 +9,14 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: irc-login.c,v 1.5 2002/03/11 17:33:40 alex Exp $
+ * $Id: irc-login.c,v 1.6 2002/03/11 22:04:10 alex Exp $
  *
  * irc-login.c: Anmeldung und Abmeldung im IRC
  *
  * $Log: irc-login.c,v $
+ * Revision 1.6  2002/03/11 22:04:10  alex
+ * - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
+ *
  * Revision 1.5  2002/03/11 17:33:40  alex
  * - Log-Level von SQUIT und QUIT bei unbekannten Clients auf DEBUG herabgesetzt.
  *
@@ -289,8 +292,8 @@ GLOBAL BOOLEAN IRC_QUIT( CLIENT *Client, REQUEST *Req )
                        return CONNECTED;
                }
 
-               if( Req->argc == 0 ) Client_Destroy( target, "Got QUIT command.", NULL );
-               else Client_Destroy( target, "Got QUIT command.", Req->argv[0] );
+               if( Req->argc == 0 ) Client_Destroy( target, "Got QUIT command.", NULL, TRUE );
+               else Client_Destroy( target, "Got QUIT command.", Req->argv[0], TRUE );
 
                return CONNECTED;
        }
index 53884517c9f88fc12155bc93ae90342dd8da46ff..bb01dcd256e158dc4e7f8a2ac9cd58d6cbac68fc 100644 (file)
@@ -9,11 +9,14 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: irc-server.c,v 1.3 2002/03/11 17:33:40 alex Exp $
+ * $Id: irc-server.c,v 1.4 2002/03/11 22:04:10 alex Exp $
  *
  * irc-server.c: IRC-Befehle fuer Server-Links
  *
  * $Log: irc-server.c,v $
+ * Revision 1.4  2002/03/11 22:04:10  alex
+ * - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?
+ *
  * Revision 1.3  2002/03/11 17:33:40  alex
  * - Log-Level von SQUIT und QUIT bei unbekannten Clients auf DEBUG herabgesetzt.
  *
@@ -351,7 +354,7 @@ GLOBAL BOOLEAN IRC_SQUIT( CLIENT *Client, REQUEST *Req )
        else
        {
                /* Verbindung hielt anderer Server */
-               Client_Destroy( target, msg, Req->argv[1] );
+               Client_Destroy( target, msg, Req->argv[1], FALSE );
                return CONNECTED;
        }
 } /* IRC_SQUIT */