- assert( target != NULL );
-
- if(( Client_NextHop( target ) != Client_ThisServer( )) && ( Client_Type( Client_NextHop( target )) == CLIENT_SERVER )) return IRC_WriteStrClientPrefix( target, from, "WHOIS %s :%s", Req->argv[0], ptr );
-
- /* Nick, User und Name */
- if( ! IRC_WriteStrClient( from, RPL_WHOISUSER_MSG, Client_ID( from ), Client_ID( c ), Client_User( c ), Client_Hostname( c ), Client_Info( c ))) return DISCONNECTED;
-
- /* Server */
- if( ! IRC_WriteStrClient( from, RPL_WHOISSERVER_MSG, Client_ID( from ), Client_ID( c ), Client_ID( Client_Introducer( c )), Client_Info( Client_Introducer( c )))) return DISCONNECTED;
-
- /* Channels */
- sprintf( str, RPL_WHOISCHANNELS_MSG, Client_ID( from ), Client_ID( c ));
- cl2chan = Channel_FirstChannelOf( c );
- while( cl2chan )
- {
- chan = Channel_GetChannel( cl2chan );
- assert( chan != NULL );
-
- /* Channel-Name anhaengen */
- if( str[strlen( str ) - 1] != ':' ) strcat( str, " " );
- if( strchr( Channel_UserModes( chan, c ), 'o' )) strcat( str, "@" );
- else if( strchr( Channel_UserModes( chan, c ), 'v' )) strcat( str, "+" );
- strcat( str, Channel_Name( chan ));
-
- if( strlen( str ) > ( LINE_LEN - CHANNEL_NAME_LEN - 4 ))
- {
- /* Zeile wird zu lang: senden! */
- if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
- sprintf( str, RPL_WHOISCHANNELS_MSG, Client_ID( from ), Client_ID( c ));
- }
-
- /* naechstes Mitglied suchen */
- cl2chan = Channel_NextChannelOf( c, cl2chan );
- }
- if( str[strlen( str ) - 1] != ':')
- {
- /* Es sind noch Daten da, die gesendet werden muessen */
- if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
- }