+ /* 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;
+ }
+ }
+
+ /* Existiert der Channel bereits, oder wird er im Moment neu erzeugt? */
+ if( is_new_chan )
+ {
+ /* Erster User im Channel: Operator-Flag setzen */
+ flags = "o";
+ }
+ else
+ {
+ /* Existierenden Channel suchen */
+ chan = Channel_Search( channame );
+ assert( chan != NULL );
+
+ is_banned = Lists_CheckBanned( target, chan );
+ is_invited = Lists_CheckInvited( target, chan );
+
+ /* Testen, ob Client gebanned ist */
+ if(( is_banned == TRUE ) && ( is_invited == FALSE ))
+ {
+ /* Client ist gebanned (und nicht invited): */
+ IRC_WriteStrClient( Client, ERR_BANNEDFROMCHAN_MSG, Client_ID( Client ), channame );
+
+ /* Try next name, if any */
+ channame = strtok( NULL, "," );
+ continue;
+ }
+
+ /* Ist der Channel "invite-only"? */
+ if(( strchr( Channel_Modes( chan ), 'i' )) && ( is_invited == FALSE ))
+ {
+ /* Channel ist "invite-only" und Client wurde nicht invited: */
+ IRC_WriteStrClient( Client, ERR_INVITEONLYCHAN_MSG, Client_ID( Client ), channame );
+
+ /* Try next name, if any */
+ channame = strtok( NULL, "," );
+ continue;
+ }
+
+ /* Is the channel protected by a key? */
+ if(( strchr( Channel_Modes( chan ), 'k' )) && ( strcmp( Channel_Key( chan ), key ? key : "" ) != 0 ))
+ {
+ /* Bad channel key! */
+ IRC_WriteStrClient( Client, ERR_BADCHANNELKEY_MSG, Client_ID( Client ), channame );
+
+ /* Try next name, if any */
+ channame = strtok( NULL, "," );
+ continue;
+ }
+
+ /* Are there already too many members? */
+ if(( strchr( Channel_Modes( chan ), 'l' )) && ( Channel_MaxUsers( chan ) <= Channel_MemberCount( chan )))
+ {
+ /* Bad channel key! */
+ IRC_WriteStrClient( Client, ERR_CHANNELISFULL_MSG, Client_ID( Client ), channame );
+
+ /* Try next name, if any */
+ channame = strtok( NULL, "," );
+ continue;
+ }
+ }