From eba8d4d553ee4b10b987b91212a23b7abf982584 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Mon, 28 Jan 2002 01:18:14 +0000 Subject: [PATCH] - connectierenden Servern werden Channels nun mit NJOIN bekannt gemacht. --- src/ngircd/irc.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 359856d5..b7fb26fc 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.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.c,v 1.44 2002/01/28 00:55:08 alex Exp $ + * $Id: irc.c,v 1.45 2002/01/28 01:18:14 alex Exp $ * * irc.c: IRC-Befehle * * $Log: irc.c,v $ + * Revision 1.45 2002/01/28 01:18:14 alex + * - connectierenden Servern werden Channels nun mit NJOIN bekannt gemacht. + * * Revision 1.44 2002/01/28 00:55:08 alex * - ein neu connectierender Server wird nun korrekt im Netz bekannt gemacht. * @@ -416,6 +419,8 @@ GLOBAL BOOLEAN IRC_SERVER( CLIENT *Client, REQUEST *Req ) CHAR str[LINE_LEN], *ptr; BOOLEAN ok; CLIENT *from, *c; + CHANNEL *chan; + CL2CHAN *cl2chan; INT i; assert( Client != NULL ); @@ -509,6 +514,40 @@ GLOBAL BOOLEAN IRC_SERVER( CLIENT *Client, REQUEST *Req ) } c = Client_Next( c ); } + + /* Channels dem neuen Server bekannt machen */ + chan = Channel_First( ); + while( chan ) + { + sprintf( str, "NJOIN %s :", Channel_Name( chan )); + + /* alle Member suchen */ + cl2chan = Channel_FirstMember( chan ); + while( cl2chan ) + { + if( str[strlen( str ) - 1] != ':' ) strcat( str, "," ); + strcat( str, Client_ID( Channel_GetClient( cl2chan ))); + + if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 )) + { + /* Zeile senden */ + if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED; + sprintf( str, "NJOIN %s :", Channel_Name( chan )); + } + + cl2chan = Channel_NextMember( chan, cl2chan ); + } + + /* noch Daten da? */ + if( str[strlen( str ) - 1] != ':') + { + /* Ja; Also senden ... */ + if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED; + } + + /* naechsten Channel suchen */ + chan = Channel_Next( chan ); + } return CONNECTED; } -- 2.39.2