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.4 2002/07/15 16:35:21 alex Exp $
14 * lists.c: Verwaltung der "IRC-Listen": Ban, Invite, ...
36 #define MASK_LEN CLIENT_ID_LEN+CLIENT_HOST_LEN
48 LOCAL C2C *My_Invites, *My_Bans;
51 LOCAL C2C *New_C2C PARAMS(( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce ));
57 /* Modul initialisieren */
59 My_Invites = My_Bans = NULL;
70 /* Invite-Lists freigeben */
79 /* Ban-Lists freigeben */
91 Lists_CheckInvited( CLIENT *Client, CHANNEL *Chan )
95 assert( Client != NULL );
96 assert( Chan != NULL );
102 if( c2c->channel == Chan )
104 /* Ok, richtiger Channel. Passt die Maske? */
105 if( strcasecmp( Client_Mask( Client ), c2c->mask ) == 0 )
110 /* Eintrag loeschen */
111 if( last ) last->next = c2c->next;
112 else My_Invites = c2c->next;
123 } /* Lists_CheckInvited */
127 Lists_AddInvited( CHAR *Pattern, CHANNEL *Chan, BOOLEAN OnlyOnce )
131 assert( Pattern != NULL );
132 assert( Chan != NULL );
134 c2c = New_C2C( Pattern, Chan, OnlyOnce );
137 Log( LOG_ERR, "Can't add new invite list entry!" );
142 c2c->next = My_Invites;
145 Log( LOG_DEBUG, "Added \"%s\" to invite list for \"%s\".", Pattern, Channel_Name( Chan ));
147 } /* Lists_AddInvited */
151 Lists_CheckBanned( CLIENT *Client, CHANNEL *Chan )
153 assert( Client != NULL );
154 assert( Chan != NULL );
157 } /* Lists_CheckBanned */
161 Lists_DeleteChannel( CHANNEL *Chan )
163 /* Channel wurde geloescht, Invite- und Ban-Lists aufraeumen */
165 C2C *c2c, *last, *next;
173 if( c2c->channel == Chan )
175 /* dieser Eintrag muss geloescht werden */
176 if( last ) last->next = next;
177 else My_Invites = next;
190 if( c2c->channel == Chan )
192 /* dieser Eintrag muss geloescht werden */
193 if( last ) last->next = next;
200 } /* Lists_DeleteChannel */
204 New_C2C( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )
208 assert( Mask != NULL );
209 assert( Chan != NULL );
211 /* Speicher fuer Eintrag anfordern */
212 c2c = malloc( sizeof( C2C ));
215 Log( LOG_EMERG, "Can't allocate memory! [New_C2C]" );
219 strncpy( c2c->mask, Mask, MASK_LEN );
221 c2c->onlyonce = OnlyOnce;