2 * ngIRCd -- The Next Generation IRC Daemon
3 * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
5 * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
6 * der GNU General Public License (GPL), wie von der Free Software Foundation
7 * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
8 * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
9 * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
10 * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
12 * $Id: lists.c,v 1.5 2002/08/26 23:39:22 alex Exp $
14 * lists.c: Verwaltung der "IRC-Listen": Ban, Invite, ...
37 #define MASK_LEN CLIENT_ID_LEN+CLIENT_HOST_LEN
49 LOCAL C2C *My_Invites, *My_Bans;
52 LOCAL C2C *New_C2C PARAMS(( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce ));
58 /* Modul initialisieren */
60 My_Invites = My_Bans = NULL;
71 /* Invite-Lists freigeben */
80 /* Ban-Lists freigeben */
92 Lists_CheckInvited( CLIENT *Client, CHANNEL *Chan )
96 assert( Client != NULL );
97 assert( Chan != NULL );
103 if( c2c->channel == Chan )
105 /* Ok, richtiger Channel. Passt die Maske? */
106 Log( LOG_DEBUG, "%s : %s", Client_Mask( Client ), c2c->mask );
107 if( Match( Client_Mask( Client ), c2c->mask ))
112 /* Eintrag loeschen */
113 if( last ) last->next = c2c->next;
114 else My_Invites = c2c->next;
125 } /* Lists_CheckInvited */
129 Lists_AddInvited( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )
133 assert( Mask != NULL );
134 assert( Chan != NULL );
136 c2c = New_C2C( Mask, Chan, OnlyOnce );
139 Log( LOG_ERR, "Can't add new invite list entry!" );
144 c2c->next = My_Invites;
147 Log( LOG_DEBUG, "Added \"%s\" to invite list for \"%s\".", Mask, Channel_Name( Chan ));
149 } /* Lists_AddInvited */
153 Lists_CheckBanned( CLIENT *Client, CHANNEL *Chan )
155 assert( Client != NULL );
156 assert( Chan != NULL );
159 } /* Lists_CheckBanned */
163 Lists_DeleteChannel( CHANNEL *Chan )
165 /* Channel wurde geloescht, Invite- und Ban-Lists aufraeumen */
167 C2C *c2c, *last, *next;
175 if( c2c->channel == Chan )
177 /* dieser Eintrag muss geloescht werden */
178 if( last ) last->next = next;
179 else My_Invites = next;
192 if( c2c->channel == Chan )
194 /* dieser Eintrag muss geloescht werden */
195 if( last ) last->next = next;
202 } /* Lists_DeleteChannel */
206 Lists_MakeMask( CHAR *Pattern )
210 /* Hier sollte aus einem "beliebigen" Pattern eine
211 * gueltige IRC-Mask erzeugt werden ... */
214 } /* Lists_MakeMask */
218 New_C2C( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )
222 assert( Mask != NULL );
223 assert( Chan != NULL );
225 /* Speicher fuer Eintrag anfordern */
226 c2c = malloc( sizeof( C2C ));
229 Log( LOG_EMERG, "Can't allocate memory! [New_C2C]" );
233 strncpy( c2c->mask, Mask, MASK_LEN );
235 c2c->onlyonce = OnlyOnce;