- /* Channels dem neuen Server bekannt machen */
- chan = Channel_First( );
- while( chan )
- {
- /* alle Member suchen */
- cl2chan = Channel_FirstMember( chan );
- sprintf( str, "NJOIN %s :", Channel_Name( chan ));
- while( cl2chan )
- {
- cl = Channel_GetClient( cl2chan );
- assert( cl != NULL );
-
- /* Nick, ggf. mit Modes, anhaengen */
- if( str[strlen( str ) - 1] != ':' ) strcat( str, "," );
- if( strchr( Channel_UserModes( chan, cl ), 'v' )) strcat( str, "+" );
- if( strchr( Channel_UserModes( chan, cl ), 'o' )) strcat( str, "@" );
- strcat( str, Client_ID( cl ));
-
- if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 8 ))
- {
- /* 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 );
+#ifdef IRCPLUS
+ if (strchr(Client_Flags(Client), 'H')) {
+ LogDebug("Peer supports IRC+ extended server handshake ...");
+ if (!IRC_Send_ISUPPORT(Client))
+ return DISCONNECTED;
+ return IRC_WriteStrClient(Client, RPL_ENDOFMOTD_MSG,
+ Client_ID(Client));
+ } else {
+#endif
+ if (Conf_MaxNickLength != CLIENT_NICK_LEN_DEFAULT)
+ Log(LOG_CRIT,
+ "Attention: this server uses a non-standard nick length, but the peer doesn't support the IRC+ extended server handshake!");
+#ifdef IRCPLUS