From: Alexander Barton Date: Mon, 30 Dec 2002 17:14:28 +0000 (+0000) Subject: - New source module "conn-func.c" and "conn-func.h". X-Git-Tag: rel-0-7-0-pre1~129 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=commitdiff_plain;h=0b04bfa7c04b074e5183109a3f67a46bcdda3aea - New source module "conn-func.c" and "conn-func.h". --- diff --git a/src/ngircd/Makefile.am b/src/ngircd/Makefile.am index 83a33109..72332653 100644 --- a/src/ngircd/Makefile.am +++ b/src/ngircd/Makefile.am @@ -9,7 +9,7 @@ # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. # -# $Id: Makefile.am,v 1.32 2002/12/30 16:07:23 alex Exp $ +# $Id: Makefile.am,v 1.33 2002/12/30 17:14:28 alex Exp $ # AUTOMAKE_OPTIONS = ../portab/ansi2knr @@ -20,18 +20,19 @@ LINTARGS = -weak -warnunixlib +unixlib -booltype BOOLEAN sbin_PROGRAMS = ngircd -ngircd_SOURCES = ngircd.c channel.c client.c conf.c conn.c conn-zip.c hash.c \ - irc.c irc-channel.c irc-info.c irc-login.c irc-mode.c irc-op.c irc-oper.c \ - irc-server.c irc-write.c lists.c log.c match.c parse.c resolve.c tool.c +ngircd_SOURCES = ngircd.c channel.c client.c conf.c conn.c conn-zip.c conn-func.c \ + hash.c irc.c irc-channel.c irc-info.c irc-login.c irc-mode.c irc-op.c \ + irc-oper.c irc-server.c irc-write.c lists.c log.c match.c parse.c resolve.c \ + tool.c ngircd_LDFLAGS = -L../portab ngircd_LDADD = -lngportab -noinst_HEADERS = ngircd.h channel.h client.h conf.h conn.h conn-zip.h hash.h \ - irc.h irc-channel.h irc-info.h irc-login.h irc-mode.h irc-op.h irc-oper.h \ - irc-server.h irc-write.h lists.h log.h match.h parse.h resolve.h tool.h \ - messages.h defines.h +noinst_HEADERS = ngircd.h channel.h client.h conf.h conn.h conn-zip.h conn-func.h \ + hash.h irc.h irc-channel.h irc-info.h irc-login.h irc-mode.h irc-op.h \ + irc-oper.h irc-server.h irc-write.h lists.h log.h match.h parse.h resolve.h \ + tool.h messages.h defines.h clean-local: rm -f check-version check-help lint.out cvs-version.* diff --git a/src/ngircd/conn-func.c b/src/ngircd/conn-func.c new file mode 100644 index 00000000..172784b6 --- /dev/null +++ b/src/ngircd/conn-func.c @@ -0,0 +1,276 @@ +/* + * ngIRCd -- The Next Generation IRC Daemon + * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * + * 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. + * + * Connection management: Global functions + */ + + +#define CONN_MODULE + +#include "portab.h" + +static char UNUSED id[] = "$Id: conn-func.c,v 1.1 2002/12/30 17:14:28 alex Exp $"; + +#include "imp.h" +#include + +#include "conn.h" + +#include "exp.h" +#include "conn-func.h" + + +GLOBAL VOID +Conn_UpdateIdle( CONN_ID Idx ) +{ + /* Idle-Timer zuruecksetzen */ + + assert( Idx > NONE ); + My_Connections[Idx].lastprivmsg = time( NULL ); +} + + +GLOBAL time_t +Conn_GetIdle( CONN_ID Idx ) +{ + /* Idle-Time einer Verbindung liefern (in Sekunden) */ + + assert( Idx > NONE ); + return time( NULL ) - My_Connections[Idx].lastprivmsg; +} /* Conn_GetIdle */ + + +GLOBAL time_t +Conn_LastPing( CONN_ID Idx ) +{ + /* Zeitpunkt des letzten PING liefern */ + + assert( Idx > NONE ); + return My_Connections[Idx].lastping; +} /* Conn_LastPing */ + + +GLOBAL VOID +Conn_SetPenalty( CONN_ID Idx, time_t Seconds ) +{ + /* Penalty-Delay fuer eine Verbindung (in Sekunden) setzen; + * waehrend dieser Zeit wird der entsprechende Socket vom Server + * bei Lese-Operationen komplett ignoriert. Der Delay kann mit + * dieser Funktion nur erhoeht, nicht aber verringert werden. */ + + time_t t; + + assert( Idx > NONE ); + assert( Seconds >= 0 ); + + t = time( NULL ) + Seconds; + if( t > My_Connections[Idx].delaytime ) My_Connections[Idx].delaytime = t; +} /* Conn_SetPenalty */ + + +GLOBAL VOID +Conn_ResetPenalty( CONN_ID Idx ) +{ + assert( Idx > NONE ); + My_Connections[Idx].delaytime = 0; +} /* Conn_ResetPenalty */ + + +GLOBAL VOID +Conn_ClearFlags( VOID ) +{ + /* Alle Connection auf "nicht-markiert" setzen */ + + CONN_ID i; + + for( i = 0; i < Pool_Size; i++ ) My_Connections[i].flag = 0; +} /* Conn_ClearFlags */ + + +GLOBAL INT +Conn_Flag( CONN_ID Idx ) +{ + /* Ist eine Connection markiert (TRUE) oder nicht? */ + + assert( Idx > NONE ); + return My_Connections[Idx].flag; +} /* Conn_Flag */ + + +GLOBAL VOID +Conn_SetFlag( CONN_ID Idx, INT Flag ) +{ + /* Connection markieren */ + + assert( Idx > NONE ); + My_Connections[Idx].flag = Flag; +} /* Conn_SetFlag */ + + +GLOBAL CONN_ID +Conn_First( VOID ) +{ + /* Connection-Struktur der ersten Verbindung liefern; + * Ist keine Verbindung vorhanden, wird NONE geliefert. */ + + CONN_ID i; + + for( i = 0; i < Pool_Size; i++ ) + { + if( My_Connections[i].sock != NONE ) return i; + } + return NONE; +} /* Conn_First */ + + +GLOBAL CONN_ID +Conn_Next( CONN_ID Idx ) +{ + /* Naechste Verbindungs-Struktur liefern; existiert keine + * weitere, so wird NONE geliefert. */ + + CONN_ID i = NONE; + + assert( Idx > NONE ); + + for( i = Idx + 1; i < Pool_Size; i++ ) + { + if( My_Connections[i].sock != NONE ) return i; + } + return NONE; +} /* Conn_Next */ + + +GLOBAL VOID +Conn_SetOption( CONN_ID Idx, INT Option ) +{ + /* Option fuer Verbindung setzen. + * Initial sind alle Optionen _nicht_ gesetzt. */ + + assert( Idx > NONE ); + assert( Option != 0 ); + + My_Connections[Idx].options |= Option; +} /* Conn_SetOption */ + + +GLOBAL VOID +Conn_UnsetOption( CONN_ID Idx, INT Option ) +{ + /* Option fuer Verbindung loeschen */ + + assert( Idx > NONE ); + assert( Option != 0 ); + + My_Connections[Idx].options &= ~Option; +} /* Conn_UnsetOption */ + + +GLOBAL INT +Conn_Options( CONN_ID Idx ) +{ + assert( Idx > NONE ); + return My_Connections[Idx].options; +} /* Conn_Options */ + + +GLOBAL time_t +Conn_StartTime( CONN_ID Idx ) +{ + /* Zeitpunkt des Link-Starts liefern (in Sekunden) */ + + assert( Idx > NONE ); + return My_Connections[Idx].starttime; +} /* Conn_Uptime */ + + +GLOBAL INT +Conn_SendQ( CONN_ID Idx ) +{ + /* Laenge der Daten im Schreibbuffer liefern */ + + assert( Idx > NONE ); +#ifdef USE_ZLIB + if( My_Connections[Idx].options & CONN_ZIP ) return My_Connections[Idx].zip.wdatalen; + else +#endif + return My_Connections[Idx].wdatalen; +} /* Conn_SendQ */ + + +GLOBAL LONG +Conn_SendMsg( CONN_ID Idx ) +{ + /* Anzahl gesendeter Nachrichten liefern */ + + assert( Idx > NONE ); + return My_Connections[Idx].msg_out; +} /* Conn_SendMsg */ + + +GLOBAL LONG +Conn_SendBytes( CONN_ID Idx ) +{ + /* Anzahl gesendeter Bytes (unkomprimiert) liefern */ + + assert( Idx > NONE ); + return My_Connections[Idx].bytes_out; +} /* Conn_SendBytes */ + + +GLOBAL INT +Conn_RecvQ( CONN_ID Idx ) +{ + /* Laenge der Daten im Lesebuffer liefern */ + + assert( Idx > NONE ); +#ifdef USE_ZLIB + if( My_Connections[Idx].options & CONN_ZIP ) return My_Connections[Idx].zip.rdatalen; + else +#endif + return My_Connections[Idx].rdatalen; +} /* Conn_RecvQ */ + + +GLOBAL LONG +Conn_RecvMsg( CONN_ID Idx ) +{ + /* Anzahl empfangener Nachrichten liefern */ + + assert( Idx > NONE ); + return My_Connections[Idx].msg_in; +} /* Conn_RecvMsg */ + + +GLOBAL LONG +Conn_RecvBytes( CONN_ID Idx ) +{ + /* Anzahl empfangener Bytes (unkomprimiert) liefern */ + + assert( Idx > NONE ); + return My_Connections[Idx].bytes_in; +} /* Conn_RecvBytes */ + + +GLOBAL VOID +Conn_ResetWCounter( VOID ) +{ + WCounter = 0; +} /* Conn_ResetWCounter */ + + +GLOBAL LONG +Conn_WCounter( VOID ) +{ + return WCounter; +} /* Conn_WCounter */ + + +/* -eof- */ diff --git a/src/ngircd/conn-func.h b/src/ngircd/conn-func.h new file mode 100644 index 00000000..73d9f742 --- /dev/null +++ b/src/ngircd/conn-func.h @@ -0,0 +1,61 @@ +/* + * ngIRCd -- The Next Generation IRC Daemon + * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * + * 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: conn-func.h,v 1.1 2002/12/30 17:14:28 alex Exp $ + * + * Connection management: Global functions (header) + */ + + +#ifndef __conn_func_h__ +#define __conn_func_h__ + + +/* Include the header conn.h if this header is _not_ included by any module + * containing connection handling functions. So other modules must only + * include this conn-func.h header. */ +#ifndef CONN_MODULE +# include "conn.h" +#endif + + +GLOBAL VOID Conn_UpdateIdle PARAMS(( CONN_ID Idx )); +GLOBAL time_t Conn_GetIdle PARAMS(( CONN_ID Idx )); +GLOBAL time_t Conn_LastPing PARAMS(( CONN_ID Idx )); +GLOBAL time_t Conn_StartTime PARAMS(( CONN_ID Idx )); +GLOBAL INT Conn_SendQ PARAMS(( CONN_ID Idx )); +GLOBAL INT Conn_RecvQ PARAMS(( CONN_ID Idx )); +GLOBAL LONG Conn_SendMsg PARAMS(( CONN_ID Idx )); +GLOBAL LONG Conn_RecvMsg PARAMS(( CONN_ID Idx )); +GLOBAL LONG Conn_SendBytes PARAMS(( CONN_ID Idx )); +GLOBAL LONG Conn_RecvBytes PARAMS(( CONN_ID Idx )); + +GLOBAL VOID Conn_SetPenalty PARAMS(( CONN_ID Idx, time_t Seconds )); +GLOBAL VOID Conn_ResetPenalty PARAMS(( CONN_ID Idx )); + +GLOBAL VOID Conn_ClearFlags PARAMS(( VOID )); +GLOBAL INT Conn_Flag PARAMS(( CONN_ID Idx )); +GLOBAL VOID Conn_SetFlag PARAMS(( CONN_ID Idx, INT Flag )); + +GLOBAL CONN_ID Conn_First PARAMS(( VOID )); +GLOBAL CONN_ID Conn_Next PARAMS(( CONN_ID Idx )); + +GLOBAL VOID Conn_SetOption PARAMS(( CONN_ID Idx, INT Option )); +GLOBAL VOID Conn_UnsetOption PARAMS(( CONN_ID Idx, INT Option )); +GLOBAL INT Conn_Options PARAMS(( CONN_ID Idx )); + +GLOBAL VOID Conn_ResetWCounter PARAMS(( VOID )); +GLOBAL LONG Conn_WCounter PARAMS(( VOID )); + + +#endif + + +/* -eof- */