From 50ec7a56a4e75dad25b20fdb904545143ac19ff3 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Mon, 11 Mar 2002 22:04:10 +0000 Subject: [PATCH] - Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken? --- src/ngircd/client.c | 37 ++++++++++++++++++++++++------------- src/ngircd/client.h | 7 +++++-- src/ngircd/conn.c | 7 +++++-- src/ngircd/irc-login.c | 9 ++++++--- src/ngircd/irc-server.c | 7 +++++-- 5 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/ngircd/client.c b/src/ngircd/client.c index 917b230e..6bbbd26f 100644 --- a/src/ngircd/client.c +++ b/src/ngircd/client.c @@ -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 ); } diff --git a/src/ngircd/client.h b/src/ngircd/client.h index 3edc10c3..68f827c0 100644 --- a/src/ngircd/client.h +++ b/src/ngircd/client.h @@ -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 ); diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 36a33dac..7dede709 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -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 ) { diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 3898d4b1..9d1c96df 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -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; } diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c index 53884517..bb01dcd2 100644 --- a/src/ngircd/irc-server.c +++ b/src/ngircd/irc-server.c @@ -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 */