-
- /* 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 )
- {
- 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 - 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;
- }
- else if( Client_Type( Client ) == CLIENT_SERVER )
- {
- /* Neuer Server wird im Netz angekuendigt */
-
- /* Falsche Anzahl Parameter? */
- if( Req->argc != 4 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- /* Ist ein Server mit dieser ID bereits registriert? */
- if( ! Client_CheckID( Client, Req->argv[0] )) return DISCONNECTED;
-
- /* Ueberfluessige Hostnamen aus Info-Text entfernen */
- ptr = strchr( Req->argv[3] + 2, '[' );
- if( ! ptr ) ptr = Req->argv[3];
-
- from = Client_GetFromID( Req->prefix );
- if( ! from )
- {
- /* Hm, Server, der diesen einfuehrt, ist nicht bekannt!? */
- Log( LOG_ALERT, "Unknown ID in prefix of SERVER: \"%s\"! (on connection %d)", Req->prefix, Client_Conn( Client ));
- Conn_Close( Client_Conn( Client ), NULL, "Unknown ID in prefix of SERVER", TRUE );
- return DISCONNECTED;
- }
-
- /* Neue Client-Struktur anlegen */
- c = Client_NewRemoteServer( Client, Req->argv[0], from, atoi( Req->argv[1] ), atoi( Req->argv[2] ), ptr, TRUE );
- if( ! c )