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:
parent
245782897b
commit
f0a9dbe3ad
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user