repo: ngircd
action: commit
revision: 
path_from: 
revision_from: fa80012e713d297983d9f18bb4f033c6ffae5a7d:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit fa80012e713d297983d9f18bb4f033c6ffae5a7d
Author: Alexander Barton 
Date:   Wed Jan 8 22:04:43 2003 +0000

    - Enhanced CHANINFO command for channel keys and user limits.

diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c
index 99b5cb095bae2a481bc10c56327adfe1342f4ed8..
index ..80b86665586a0ca5a567742278296cb6059485a1 100644
--- a/src/ngircd/irc-server.c
+++ b/src/ngircd/irc-server.c
@@ -14,7 +14,7 @@

 #include "portab.h"

-static char UNUSED id[] = "$Id: irc-server.c,v 1.30 2002/12/30 16:07:50 alex Exp $";
+static char UNUSED id[] = "$Id: irc-server.c,v 1.31 2003/01/08 22:04:43 alex Exp $";

 #include "imp.h"
 #include 
@@ -41,7 +41,7 @@ static char UNUSED id[] = "$Id: irc-server.c,v 1.30 2002/12/30 16:07:50 alex Exp
 GLOBAL BOOLEAN
 IRC_SERVER( CLIENT *Client, REQUEST *Req )
 {
-	CHAR str[LINE_LEN], *ptr;
+	CHAR str[LINE_LEN], *ptr, *modes, *topic;
 	CLIENT *from, *c, *cl;
 	CL2CHAN *cl2chan;
 	INT max_hops, i;
@@ -179,11 +179,31 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
 		while( chan )
 		{
 #ifdef IRCPLUS
-			/* Wenn unterstuetzt, CHANINFO senden */
+			/* Send CHANINFO if the peer supports it */
 			if( strchr( Client_Flags( Client ), 'C' ))
 			{
-				/* CHANINFO senden */
-				if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s :%s", Channel_Name( chan ), Channel_Modes( chan ), Channel_Topic( chan ))) return DISCONNECTED;
+				modes = Channel_Modes( chan );
+				topic = Channel_Topic( chan );
+
+				if( *modes || *topic )
+				{
+					/* send CHANINFO */
+					if(( ! strchr( Channel_Modes( chan ), 'k' )) && ( ! strchr( Channel_Modes( chan ), 'l' )) && ( ! *topic ))
+					{
+						/* "CHANINFO  +" */
+						if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s", Channel_Name( chan ), modes )) return DISCONNECTED;
+					}
+					else if(( ! strchr( Channel_Modes( chan ), 'k' )) && ( ! strchr( Channel_Modes( chan ), 'l' )))
+					{
+						/* "CHANINFO  + :" */
+						if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s :%s", Channel_Name( chan ), modes, topic )) return DISCONNECTED;
+					}
+					else
+					{
+						/* "CHANINFO  +   :" */
+						if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s %s %ld :%s", Channel_Name( chan ), modes, strchr( Channel_Modes( chan ), 'k' ) ? Channel_Key( chan ) : "*", strchr( Channel_Modes( chan ), 'l' ) ? Channel_MaxUsers( chan ) : 0L, topic )) return DISCONNECTED;
+					}
+				}
 			}
 #endif

-----END OF PAGE-----