* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
- * $Id: irc-channel.c,v 1.7 2002/06/01 14:37:28 alex Exp $
+ * $Id: irc-channel.c,v 1.11 2002/08/26 23:39:22 alex Exp $
*
* irc-channel.c: IRC-Channel-Befehle
*/
#include "channel.h"
#include "lists.h"
#include "log.h"
+#include "match.h"
#include "messages.h"
#include "parse.h"
#include "irc.h"
channame = strtok( Req->argv[0], "," );
while( channame )
{
- /* wird der Channel neu angelegt? */
- flags = NULL;
+ chan = flags = NULL;
+ /* wird der Channel neu angelegt? */
if( Channel_Search( channame )) is_new_chan = FALSE;
else is_new_chan = TRUE;
{
/* Channel-Flags extrahieren */
flags = strchr( channame, 0x7 );
- if( flags ) *flags++ = '\0';
+ if( flags )
+ {
+ *flags = '\0';
+ flags++;
+ }
}
/* Lokaler Client? */
if( Lists_CheckBanned( target, chan ))
{
/* Client ist gebanned: */
+ IRC_WriteStrClient( Client, ERR_BANNEDFROMCHAN_MSG, Client_ID( Client ), channame );
+
+ /* naechsten Namen ermitteln */
+ channame = strtok( NULL, "," );
+ continue;
}
/* Ist der Channel "invite-only"? */
if( ! Lists_CheckInvited( target, chan ))
{
/* Client wurde nicht invited: */
+ IRC_WriteStrClient( Client, ERR_INVITEONLYCHAN_MSG, Client_ID( Client ), channame );
+
+ /* naechsten Namen ermitteln */
+ channame = strtok( NULL, "," );
+ continue;
}
}
}
if( modes[1] )
{
/* Modes im Channel bekannt machen */
- IRC_WriteStrChannelPrefix( Client, chan, target, FALSE, "MODE %s %s :%s", channame, modes, Client_ID( target ));
+ IRC_WriteStrChannelPrefix( Client, chan, target, FALSE, "MODE %s +%s :%s", channame, &modes[1], Client_ID( target ));
}
if( Client_Type( Client ) == CLIENT_USER )
chan = Channel_First( );
while( chan )
{
- /* Passt die Suchmaske auf diesen Channel? Bisher werden hier
- * "regular expressions" aber noch nicht unterstuetzt ... */
- if(( strcasecmp( pattern, Channel_Name( chan )) == 0 ) || ( strcmp( pattern, "*" ) == 0 ))
+ /* Passt die Suchmaske auf diesen Channel? */
+ if( Match( pattern, Channel_Name( chan )))
{
/* Treffer! */
if( ! IRC_WriteStrClient( Client, RPL_LIST_MSG, Client_ID( Client), Channel_Name( chan ), Channel_MemberCount( chan ), Channel_Topic( chan ))) return DISCONNECTED;