about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2002-01-28 01:18:14 +0000
committerAlexander Barton <alex@barton.de>2002-01-28 01:18:14 +0000
commiteba8d4d553ee4b10b987b91212a23b7abf982584 (patch)
tree28a71e44ea3973d5d3f23ba12b25a248de1816f7 /src
parent71c7a6fcc07f1899197d494aefc0b9f4e91405e7 (diff)
downloadngircd-eba8d4d553ee4b10b987b91212a23b7abf982584.tar.gz
ngircd-eba8d4d553ee4b10b987b91212a23b7abf982584.zip
- connectierenden Servern werden Channels nun mit NJOIN bekannt gemacht.
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/irc.c41
1 files changed, 40 insertions, 1 deletions
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;
 	}