1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-04-30 06:33:11 +00:00

IRC_Send_NAMES(): Code cleanup

This commit is contained in:
Alexander Barton 2012-04-28 00:20:42 +02:00
parent 245782897b
commit f0a9dbe3ad

View File

@ -1524,60 +1524,71 @@ IRC_Show_MOTD( CLIENT *Client )
} /* IRC_Show_MOTD */ } /* IRC_Show_MOTD */
/**
* Send NAMES reply for a specific client and channel.
*
* @param Client The client requesting the NAMES information.
* @param Chan The channel
* @return CONNECTED or DISCONNECTED.
*/
GLOBAL bool GLOBAL bool
IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan)
{ {
bool is_visible, is_member; bool is_visible, is_member;
char str[LINE_LEN + 1]; char str[LINE_LEN + 1];
CL2CHAN *cl2chan; CL2CHAN *cl2chan;
CLIENT *cl; CLIENT *cl;
assert( Client != NULL ); assert(Client != NULL);
assert( Chan != NULL ); assert(Chan != NULL);
if( Channel_IsMemberOf( Chan, Client )) is_member = true; if (Channel_IsMemberOf(Chan, Client))
else is_member = false; is_member = true;
else
is_member = false;
/* Do not print info on channel memberships to anyone that is not member? */ /* Do not print info on channel memberships to anyone that is not member? */
if (Conf_MorePrivacy && !is_member) if (Conf_MorePrivacy && !is_member)
return CONNECTED; return CONNECTED;
/* Secret channel? */ /* Secret channel? */
if( ! is_member && strchr( Channel_Modes( Chan ), 's' )) return CONNECTED; if (!is_member && strchr(Channel_Modes(Chan), 's'))
return CONNECTED;
/* Alle Mitglieder suchen */ snprintf(str, sizeof(str), RPL_NAMREPLY_MSG, Client_ID(Client), "=",
snprintf( str, sizeof( str ), RPL_NAMREPLY_MSG, Client_ID( Client ), "=", Channel_Name( Chan )); Channel_Name(Chan));
cl2chan = Channel_FirstMember( Chan ); cl2chan = Channel_FirstMember(Chan);
while( cl2chan ) while (cl2chan) {
{ cl = Channel_GetClient(cl2chan);
cl = Channel_GetClient( cl2chan );
if( strchr( Client_Modes( cl ), 'i' )) is_visible = false; if (strchr(Client_Modes(cl), 'i'))
else is_visible = true; is_visible = false;
else
is_visible = true;
if( is_member || is_visible ) if (is_member || is_visible) {
{ if (str[strlen(str) - 1] != ':')
/* Nick anhaengen */ strlcat(str, " ", sizeof(str));
if( str[strlen( str ) - 1] != ':' ) strlcat( str, " ", sizeof( str )); if (strchr(Channel_UserModes(Chan, cl), 'o'))
if( strchr( Channel_UserModes( Chan, cl ), 'o' )) strlcat( str, "@", sizeof( str )); strlcat(str, "@", sizeof(str));
else if( strchr( Channel_UserModes( Chan, cl ), 'v' )) strlcat( str, "+", sizeof( str )); else if (strchr(Channel_UserModes(Chan, cl), 'v'))
strlcat( str, Client_ID( cl ), sizeof( str )); strlcat(str, "+", sizeof(str));
strlcat(str, Client_ID(cl), sizeof(str));
if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 )) if (strlen(str) > (LINE_LEN - CLIENT_NICK_LEN - 4)) {
{ if (!IRC_WriteStrClient(Client, "%s", str))
/* Zeile wird zu lang: senden! */ return DISCONNECTED;
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; snprintf(str, sizeof(str), RPL_NAMREPLY_MSG,
snprintf( str, sizeof( str ), RPL_NAMREPLY_MSG, Client_ID( Client ), "=", Channel_Name( Chan )); Client_ID(Client), "=",
Channel_Name(Chan));
} }
} }
/* naechstes Mitglied suchen */ cl2chan = Channel_NextMember(Chan, cl2chan);
cl2chan = Channel_NextMember( Chan, cl2chan );
} }
if( str[strlen( str ) - 1] != ':') if (str[strlen(str) - 1] != ':') {
{ if (!IRC_WriteStrClient(Client, "%s", str))
/* Es sind noch Daten da, die gesendet werden muessen */ return DISCONNECTED;
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
} }
return CONNECTED; return CONNECTED;