commit eba8d4d553ee4b10b987b91212a23b7abf982584 from: Alexander Barton date: Mon Jan 28 01:18:14 2002 UTC - connectierenden Servern werden Channels nun mit NJOIN bekannt gemacht. commit - 71c7a6fcc07f1899197d494aefc0b9f4e91405e7 commit + eba8d4d553ee4b10b987b91212a23b7abf982584 blob - 359856d5568df96ef6ff47402ea6f2a9d84c6230 blob + b7fb26fc83e3e7a774b7b104f31c9da1b613bef5 --- src/ngircd/irc.c +++ 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 *Re 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 *Re } 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; }