#include "portab.h"
-static char UNUSED id[] = "$Id: irc-channel.c,v 1.32 2005/09/02 15:46:49 alex Exp $";
+static char UNUSED id[] = "$Id: irc-channel.c,v 1.39 2006/12/07 17:57:20 fw Exp $";
#include "imp.h"
#include <assert.h>
/* Channel-Namen durchgehen */
while (channame)
{
- Log(LOG_INFO, "channame=%s, key=%s", channame, key ? key : "-");
chan = NULL; flags = NULL;
/* wird der Channel neu angelegt? */
- if( Channel_Search( channame )) is_new_chan = false;
- else is_new_chan = true;
+ if( Channel_Search( channame )) {
+ is_new_chan = false;
+ } else {
+ if (Conf_PredefChannelsOnly) { /* this server does not allow creation of channels */
+ IRC_WriteStrClient( Client, ERR_BANNEDFROMCHAN_MSG, Client_ID( Client ), channame );
+ /* Try next name, if any */
+ channame = strchr(channame, ',');
+ continue;
+ }
+ is_new_chan = true;
+ }
/* Hat ein Server Channel-User-Modes uebergeben? */
if( Client_Type( Client ) == CLIENT_SERVER )
if( Client_Type( Client ) == CLIENT_USER )
{
/* Test if the user has reached his maximum channel count */
- if( Client_Type( Client ) == CLIENT_USER )
- {
- if(( Conf_MaxJoins > 0 ) && ( Channel_CountForUser( Client ) >= Conf_MaxJoins ))
- {
- IRC_WriteStrClient( Client, ERR_TOOMANYCHANNELS_MSG, Client_ID( Client ), channame );
- return CONNECTED;
- }
- }
+ if(( Conf_MaxJoins > 0 ) && ( Channel_CountForUser( Client ) >= Conf_MaxJoins ))
+ return IRC_WriteStrClient( Client, ERR_TOOMANYCHANNELS_MSG,
+ Client_ID( Client ), channame );
/* Existiert der Channel bereits, oder wird er im Moment neu erzeugt? */
if( is_new_chan )
chan = Channel_Search( channame );
assert( chan != NULL );
- is_banned = Lists_CheckBanned( target, chan );
- is_invited = Lists_CheckInvited( target, chan );
+ is_banned = Lists_Check(Channel_GetListBans(chan), target );
+ is_invited = Lists_Check(Channel_GetListInvites(chan), target );
/* Testen, ob Client gebanned ist */
if(( is_banned == true) && ( is_invited == false ))
IRC_WriteStrClient( Client, ERR_BANNEDFROMCHAN_MSG, Client_ID( Client ), channame );
/* Try next name, if any */
- channame = strtok( NULL, "," );
+ channame = strchr(channame, ',');
continue;
}
IRC_WriteStrClient( Client, ERR_INVITEONLYCHAN_MSG, Client_ID( Client ), channame );
/* Try next name, if any */
- channame = strtok( NULL, "," );
+ channame = strchr(channame, ',');
continue;
}
IRC_WriteStrClient( Client, ERR_BADCHANNELKEY_MSG, Client_ID( Client ), channame );
/* Try next name, if any */
- channame = strtok( NULL, "," );
+ channame = strchr(channame, ',');
continue;
}
IRC_WriteStrClient( Client, ERR_CHANNELISFULL_MSG, Client_ID( Client ), channame );
/* Try next name, if any */
- channame = strtok( NULL, "," );
+ channame = strchr(channame, ',');
continue;
}
}
* commands) in this list become deleted when a user
* joins a channel this way. */
chan = Channel_Search( channame );
- if( chan != NULL ) (void)Lists_CheckInvited( target, chan );
+ if( chan != NULL ) (void)Lists_Check(Channel_GetListInvites(chan), target);
}
/* Channel joinen (und ggf. anlegen) */
if( ! Channel_Join( target, channame ))
{
/* naechsten Namen ermitteln */
- channame = strtok( NULL, "," );
+ channame = strchr(channame, ',');
continue;
}
if( ! chan ) chan = Channel_Search( channame );
{
if( *ptr == 'l' )
{
- snprintf( l, sizeof( l ), " %ld", Channel_MaxUsers( chan ));
+ snprintf( l, sizeof( l ), " %lu", Channel_MaxUsers( chan ));
strlcat( modes_add, l, sizeof( modes_add ));
}
if( *ptr == 'k' )