* 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.6 2002/05/27 13:09:26 alex Exp $
+ * $Id: irc-channel.c,v 1.12 2002/08/27 13:57:03 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 )
/* Welcher Channel? */
chan = Channel_Search( Req->argv[0] );
- if( ! chan ) return IRC_WriteStrClient( from, ERR_NOTONCHANNEL_MSG, Client_ID( from ), Req->argv[0] );
+ if( ! chan ) return IRC_WriteStrClient( from, ERR_NOSUCHCHANNEL_MSG, Client_ID( from ), Req->argv[0] );
/* Ist der User Mitglied in dem Channel? */
if( ! Channel_IsMemberOf( chan, from )) return IRC_WriteStrClient( from, ERR_NOTONCHANNEL_MSG, Client_ID( from ), Req->argv[0] );
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;