X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fchannel.c;h=7f37dba6f3857420f720a136e079b6311a59b6a9;hp=50cce094c1f7b448fc17645a65b66ffab2f7600f;hb=4f6f84e7e1bc015e201e8a79e13b0906dcb23ec1;hpb=378e511e044ce5e240d99b67bc24ebf18a274ffd diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c index 50cce094..7f37dba6 100644 --- a/src/ngircd/channel.c +++ b/src/ngircd/channel.c @@ -2,16 +2,13 @@ * ngIRCd -- The Next Generation IRC Daemon * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) * - * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen - * der GNU General Public License (GPL), wie von der Free Software Foundation - * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 - * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version. - * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste - * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: channel.c,v 1.32 2002/09/03 23:57:57 alex Exp $ - * - * channel.c: Management der Channels + * Channel management */ @@ -20,6 +17,8 @@ #include "portab.h" +static char UNUSED id[] = "$Id: channel.c,v 1.39 2002/12/25 13:22:43 alex Exp $"; + #include "imp.h" #include #include @@ -88,6 +87,14 @@ Channel_InitPredefined( VOID ) Log( LOG_ERR, "Can't create pre-defined channel: invalid name: \"%s\"!", Conf_Channel[i].name ); continue; } + + /* Gibt es den Channel bereits? */ + chan = Channel_Search( Conf_Channel[i].name ); + if( chan ) + { + Log( LOG_INFO, "Can't create pre-defined channel \"%s\": name already in use.", Conf_Channel[i].name ); + continue; + } /* Channel anlegen */ chan = Channel_Create( Conf_Channel[i].name ); @@ -249,11 +256,11 @@ Channel_Quit( CLIENT *Client, CHAR *Reason ) } /* Channel_Quit */ -GLOBAL INT +GLOBAL LONG Channel_Count( VOID ) { CHANNEL *c; - INT count; + LONG count; count = 0; c = My_Channels; @@ -266,11 +273,11 @@ Channel_Count( VOID ) } /* Channel_Count */ -GLOBAL INT +GLOBAL LONG Channel_MemberCount( CHANNEL *Chan ) { CL2CHAN *cl2chan; - INT count; + LONG count; assert( Chan != NULL ); @@ -285,6 +292,48 @@ Channel_MemberCount( CHANNEL *Chan ) } /* Channel_MemberCount */ +GLOBAL INT +Channel_CountForUser( CLIENT *Client ) +{ + /* Count number of channels a user is member of. */ + + CL2CHAN *cl2chan; + INT count; + + assert( Client != NULL ); + + count = 0; + cl2chan = My_Cl2Chan; + while( cl2chan ) + { + if( cl2chan->client == Client ) count++; + cl2chan = cl2chan->next; + } + + return count; +} /* Channel_CountForUser */ + + +GLOBAL INT +Channel_PCount( VOID ) +{ + /* Count the number of persistent (mode 'P') channels */ + + CHANNEL *chan; + INT count; + + count = 0; + chan = My_Channels; + while( chan ) + { + if( strchr( chan->modes, 'P' )) count++; + chan = chan->next; + } + + return count; +} /* Channel_PCount */ + + GLOBAL CHAR * Channel_Name( CHANNEL *Chan ) { @@ -301,6 +350,22 @@ Channel_Modes( CHANNEL *Chan ) } /* Channel_Modes */ +GLOBAL CHAR * +Channel_Key( CHANNEL *Chan ) +{ + assert( Chan != NULL ); + return Chan->key; +} /* Channel_Key */ + + +GLOBAL LONG +Channel_MaxUsers( CHANNEL *Chan ) +{ + assert( Chan != NULL ); + return Chan->maxusers; +} /* Channel_MaxUsers */ + + GLOBAL CHANNEL * Channel_First( VOID ) { @@ -403,7 +468,7 @@ Channel_IsValidName( CHAR *Name ) if(( Name[0] != '#' ) || ( strlen( Name ) >= CHANNEL_NAME_LEN )) return FALSE; ptr = Name; - strcpy( badchars, " ,:\x07" ); + strcpy( badchars, " ,:\007" ); while( *ptr ) { if( strchr( badchars, *ptr )) return FALSE; @@ -580,6 +645,27 @@ Channel_SetModes( CHANNEL *Chan, CHAR *Modes ) } /* Channel_SetModes */ +GLOBAL VOID +Channel_SetKey( CHANNEL *Chan, CHAR *Key ) +{ + assert( Chan != NULL ); + assert( Key != NULL ); + + strncpy( Chan->key, Key, CLIENT_PASS_LEN - 1 ); + Chan->key[CLIENT_PASS_LEN - 1] = '\0'; + Log( LOG_DEBUG, "Channel %s: Key is now \"%s\".", Chan->name, Chan->key ); +} /* Channel_SetKey */ + + +GLOBAL VOID +Channel_SetMaxUsers( CHANNEL *Chan, LONG Count ) +{ + assert( Chan != NULL ); + + Chan->maxusers = Count; + Log( LOG_DEBUG, "Channel %s: Member limit is now %ld.", Chan->name, Chan->maxusers ); +} /* Channel_SetMaxUsers */ + GLOBAL BOOLEAN Channel_Write( CHANNEL *Chan, CLIENT *From, CLIENT *Client, CHAR *Text ) @@ -629,6 +715,8 @@ Channel_Create( CHAR *Name ) strcpy( c->modes, "" ); strcpy( c->topic, "" ); c->hash = Hash( c->name ); + strcpy( c->key, "" ); + c->maxusers = 0; /* Verketten */ c->next = My_Channels;