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.3 2002/06/09 13:18:23 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 ));
146 } /* Lists_AddInvited */
150 Lists_CheckBanned( CLIENT *Client, CHANNEL *Chan )
152 assert( Client != NULL );
153 assert( Chan != NULL );
156 } /* Lists_CheckBanned */
160 Lists_DeleteChannel( CHANNEL *Chan )
162 /* Channel wurde geloescht, Invite- und Ban-Lists aufraeumen */
164 C2C *c2c, *last, *next;
172 if( c2c->channel == Chan )
174 /* dieser Eintrag muss geloescht werden */
175 if( last ) last->next = next;
176 else My_Invites = next;
189 if( c2c->channel == Chan )
191 /* dieser Eintrag muss geloescht werden */
192 if( last ) last->next = next;
199 } /* Lists_DeleteChannel */
203 New_C2C( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )
207 assert( Mask != NULL );
208 assert( Chan != NULL );
210 /* Speicher fuer Eintrag anfordern */
211 c2c = malloc( sizeof( C2C ));
214 Log( LOG_EMERG, "Can't allocate memory! [New_C2C]" );
218 strncpy( c2c->mask, Mask, MASK_LEN );
220 c2c->onlyonce = OnlyOnce;