+#ifdef IRCPLUS
+ /* Send CHANINFO if the peer supports it */
+ if( strchr( Client_Flags( Client ), 'C' ))
+ {
+ 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 <chan> +<modes>" */
+ 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 <chan> +<modes> :<topic>" */
+ if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s :%s", Channel_Name( chan ), modes, topic )) return DISCONNECTED;
+ }
+ else
+ {
+ /* "CHANINFO <chan> +<modes> <key> <limit> :<topic>" */
+ 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
+