[NeoStats-Devel] [Commits] r2754 - in trunk: include modules/statserv src

[email protected] Sat, 20 Aug 2005 08:59:15 +1000
Newsgroups gmane.comp.neostats.devel
Message-ID <[email protected]>
Author: Mark
Date: Sat Aug 20 06:59:11 2005
New Revision: 2754

Modified:
   trunk/include/neostats.h
   trunk/modules/statserv/channel.c
   trunk/modules/statserv/channel.h
   trunk/modules/statserv/htmlstats.c
   trunk/modules/statserv/htmlstats.h
   trunk/modules/statserv/network.c
   trunk/modules/statserv/server.c
   trunk/modules/statserv/stats.c
   trunk/modules/statserv/stats.h
   trunk/modules/statserv/statserv.c
   trunk/modules/statserv/tld.c
   trunk/modules/statserv/user.c
   trunk/modules/statserv/version.c
   trunk/src/nsdba.c
Log:
StatServ: more comments and tidy ups

Modified: trunk/include/neostats.h
==============================================================================
--- trunk/include/neostats.h	(original)
+++ trunk/include/neostats.h	Sat Aug 20 06:59:11 2005
@@ -1381,9 +1381,9 @@
 EXPORTFUNC int DBACloseDatabase( void );
 EXPORTFUNC int DBAOpenTable( const char *table );
 EXPORTFUNC int DBACloseTable( const char *table );
-EXPORTFUNC int DBAStore( const char *table, char *key, void *data, int size );
-EXPORTFUNC int DBAFetch( const char *table, char *key, void *data, int size );
-EXPORTFUNC int DBADelete( const char *table, char * key );
+EXPORTFUNC int DBAStore( const char *table, const char *key, void *data, int size );
+EXPORTFUNC int DBAFetch( const char *table, const char *key, void *data, int size );
+EXPORTFUNC int DBADelete( const char *table, const char * key );
 EXPORTFUNC int DBAFetchRows( const char *table, DBRowHandler handler );
 /* DB API Macros to wrap common types */
 #define DBAStoreBool( table, key, data ) DBAStore( table, key, ( void* )data, sizeof ( int ) )

Modified: trunk/modules/statserv/channel.c
==============================================================================
--- trunk/modules/statserv/channel.c	(original)
+++ trunk/modules/statserv/channel.c	Sat Aug 20 06:59:11 2005
@@ -27,10 +27,29 @@
 #include "network.h"
 #include "channel.h"
 
+/** Channel table name */
 #define CHANNEL_TABLE	"Channel"
 
+/** Channel list */
 static list_t *channelstatlist;
 
+/** @brief AverageChannelStatistic
+ *
+ *  Average channel statistic
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+static void AverageChannelStatistic( channelstat *cs, const void *v )
+{
+	AverageStatistic( &cs->users );
+	AverageStatistic( &cs->kicks );
+	AverageStatistic( &cs->topics );
+	AverageStatistic( &cs->joins );
+}
+
 /** @brief AverageChannelStatistics
  *
  *  Average channel statistics
@@ -42,18 +61,24 @@
 
 void AverageChannelStatistics( void )
 {
-	lnode_t *cn;
-	channelstat *cs;
+	GetChannelStats( AverageChannelStatistic, CHANNEL_SORT_NONE, -1, 0, NULL );
+}
 
-	cn = list_first( channelstatlist );
-	while( cn ) {
-		cs = lnode_get( cn );
-		AverageStatistic( &cs->users );
-		AverageStatistic( &cs->kicks );
-		AverageStatistic( &cs->topics );
-		AverageStatistic( &cs->joins );
-		cn = list_next( channelstatlist, cn );
-	}
+/** @brief ResetChannelStatistic
+ *
+ *  Reset channel statistic
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void ResetChannelStatistic( channelstat *cs, const void *v )
+{
+	ResetStatistic( &cs->users );
+	ResetStatistic( &cs->kicks );
+	ResetStatistic( &cs->topics );
+	ResetStatistic( &cs->joins );
 }
 
 /** @brief ResetChannelStatistics
@@ -67,31 +92,38 @@
 
 void ResetChannelStatistics( void )
 {
-	lnode_t *cn;
-	channelstat *cs;
-
-	cn = list_first( channelstatlist );
-	while( cn ) {
-		cs = lnode_get( cn );
-		ResetStatistic( &cs->users );
-		ResetStatistic( &cs->kicks );
-		ResetStatistic( &cs->topics );
-		ResetStatistic( &cs->joins );
-		cn = list_next( channelstatlist, cn );
-	}
+	GetChannelStats( ResetChannelStatistic, CHANNEL_SORT_NONE, -1, 0, NULL );
 }
 
-static channelstat *findchanstats( char *name )
+/** @brief findchanstats
+ *
+ *  Check list for channel
+ *
+ *  @param name of channel ctcp version to search for
+ *
+ *  @return pointer to stat found or NULL if none
+ */
+
+static channelstat *findchanstats( const char *name )
 {
 	channelstat *cs;
 
 	cs = lnode_find( channelstatlist, name, comparef );
-	if( !cs ) {
+	if( !cs )
 		dlog( DEBUG2, "findchanstats: %s not found", name );
-	}	
 	return cs;
 }
 
+/** @brief topcurrentchannel
+ *
+ *  list sorting helper
+ *
+ *  @param key1
+ *  @param key2
+ *
+ *  @return results of comparison
+ */
+
 int topcurrentchannel( const void *key1, const void *key2 )
 {
 	const channelstat *chan1 = key1;
@@ -99,6 +131,16 @@
 	return( chan2->c->users - chan1->c->users );
 }
 
+/** @brief topjoinrunningtotalchannel
+ *
+ *  list sorting helper
+ *
+ *  @param key1
+ *  @param key2
+ *
+ *  @return results of comparison
+ */
+
 int topjoinrunningtotalchannel( const void *key1, const void *key2 )
 {
 	const channelstat *chan1 = key1;
@@ -106,6 +148,16 @@
 	return( chan2->users.alltime.runningtotal - chan1->users.alltime.runningtotal );
 }
 
+/** @brief topkickrunningtotalchannel
+ *
+ *  list sorting helper
+ *
+ *  @param key1
+ *  @param key2
+ *
+ *  @return results of comparison
+ */
+
 int topkickrunningtotalchannel( const void *key1, const void *key2 )
 {
 	const channelstat *chan1 = key1;
@@ -113,6 +165,16 @@
 	return( chan2->kicks.alltime.runningtotal - chan1->kicks.alltime.runningtotal );
 }
 
+/** @brief toptopicrunningtotalchannel
+ *
+ *  list sorting helper
+ *
+ *  @param key1
+ *  @param key2
+ *
+ *  @return results of comparison
+ */
+
 int toptopicrunningtotalchannel( const void *key1, const void *key2 )
 {
 	const channelstat *chan1 = key1;
@@ -120,35 +182,41 @@
 	return( chan2->topics.alltime.runningtotal - chan1->topics.alltime.runningtotal );
 }
 
-/* @brief load the info for a specific channel from the database 
- * or return null a blank if it does not exist. 
- * 
- * @params name the channel name to load
- * 
- * @returns a channelstat struct that contains info for the channel. If its a new Channel, contains the name and thats it.
+/** @brief LoadChannel
+ *
+ *  Load channel stats
+ *
+ *  @param name of channel to load
+ *
+ *  @return pointer to stat
  */
- 
+
 static channelstat *LoadChannel( char *name ) 
 {
 	channelstat *cs;
 
 	SET_SEGV_LOCATION();
-	if( list_isfull( channelstatlist ) ) {
+	if( list_isfull( channelstatlist ) )
+	{
 		nlog( LOG_CRITICAL, "StatServ channel hash full" );
 		return NULL;
 	}
 	cs = ns_calloc( sizeof( channelstat ) );
-	if( DBAFetch( CHANNEL_TABLE, name, cs, sizeof( channelstat ) ) == NS_SUCCESS ) {
+	if( DBAFetch( CHANNEL_TABLE, name, cs, sizeof( channelstat ) ) == NS_SUCCESS )
+	{
 		dlog( DEBUG2, "Loading channel %s", cs->name );
 		PostLoadStatistic( &cs->joins );
 		PostLoadStatistic( &cs->kicks );
 		PostLoadStatistic( &cs->topics );
 		PostLoadStatistic( &cs->users );
-		if( ( me.now - cs->ts_lastseen ) > StatServ.channeltime ) {
+		if( ( me.now - cs->ts_lastseen ) > StatServ.channeltime )
+		{
 			dlog( DEBUG1, "Reset old channel %s", cs->name );
 			cs->ts_lastseen = me.now;
 		}
-	} else {
+	} 
+	else
+	{
 		dlog( DEBUG2, "Creating channel %s", cs->name );
 		strlcpy( cs->name, name, MAXCHANLEN );	
 	}
@@ -157,14 +225,15 @@
 	return cs;
 }
 
-/* @brief save the info for a specific channel to the database 
- *  
- * 
- * @params cs the channelstat struct to save
- * 
- * @returns nothing
+/** @brief SaveChannel
+ *
+ *  Save channel stats
+ *
+ *  @param cs channel to save
+ *
+ *  @return pointer to stat
  */
- 
+
 static void SaveChannel( channelstat *cs ) 
 {
 	PreSaveStatistic( &cs->joins );
@@ -175,6 +244,16 @@
 	cs->lastsave = me.now;
 }
 
+/** @brief AddChannel
+ *
+ *  Add channel
+ *
+ *  @param c pointer to channel
+ *  @param v not used
+ *
+ *  @return none
+ */
+
 static int AddChannel( Channel* c, void *v )
 {
 	channelstat *cs;
@@ -186,12 +265,30 @@
 	return NS_FALSE;
 }
 
+/** @brief ss_event_newchan
+ *
+ *  NEWCHAN event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_newchan( const CmdParams *cmdparams )
 {
 	AddChannel( cmdparams->channel, NULL );
 	return NS_SUCCESS;
 }
 
+/** @brief ss_event_delchan
+ *
+ *  DELCHAN event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_delchan( const CmdParams *cmdparams )
 {
 	channelstat *cs;
@@ -200,7 +297,8 @@
 	ClearChannelModValue( cmdparams->channel );
 	DelNetworkChannel();
 	ln = list_find( channelstatlist, cmdparams->channel->name, comparef );
-	if( !ln ) {
+	if( !ln )
+	{
 		nlog( LOG_WARNING, "Couldn't find channel %s when deleting from stats", cmdparams->channel->name );
 		return NS_SUCCESS;
 	}
@@ -212,6 +310,15 @@
 	return NS_SUCCESS;
 }
 
+/** @brief ss_event_join
+ *
+ *  JOIN event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_join( const CmdParams *cmdparams )
 {										   
 	channelstat *cs;
@@ -227,6 +334,15 @@
 	return NS_SUCCESS;
 }
 
+/** @brief ss_event_part
+ *
+ *  PART event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_part( const CmdParams *cmdparams )
 {
 	channelstat *cs;
@@ -242,6 +358,15 @@
 	return NS_SUCCESS;
 }
 
+/** @brief ss_event_kick
+ *
+ *  KICK event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_topic( const CmdParams *cmdparams )
 {
 	channelstat *cs;
@@ -256,6 +381,15 @@
 	return NS_SUCCESS;
 }
 
+/** @brief ss_event_kick
+ *
+ *  KICK event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_event_kick( const CmdParams *cmdparams )
 {
 	channelstat *cs;
@@ -271,6 +405,16 @@
 	return NS_SUCCESS;
 }
 
+/** @brief top10membershandler
+ *
+ *  Report topics
+ *
+ *  @param cs pointer to channel stat
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
+
 static void top10membershandler( const channelstat *cs, const void *v )
 {
 	CmdParams *cmdparams = ( CmdParams * ) v;
@@ -279,6 +423,16 @@
 		cs->name, cs->c->users );
 }
 
+/** @brief top10joinshandler
+ *
+ *  Report topics
+ *
+ *  @param cs pointer to channel stat
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
+
 static void top10joinshandler( const channelstat *cs, const void *v )
 {
 	CmdParams *cmdparams = ( CmdParams * ) v;
@@ -287,6 +441,16 @@
 		cs->name, cs->users.alltime.runningtotal );
 }
 
+/** @brief top10kickshandler
+ *
+ *  Report topics
+ *
+ *  @param cs pointer to channel stat
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
+
 static void top10kickshandler( const channelstat *cs, const void *v )
 {
 	CmdParams *cmdparams = ( CmdParams * ) v;
@@ -295,6 +459,16 @@
 		cs->name, cs->kicks.alltime.runningtotal );
 }
 
+/** @brief top10topicshandler
+ *
+ *  Report topics
+ *
+ *  @param cs pointer to channel stat
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
+
 static void top10topicshandler( const channelstat *cs, const void *v )
 {
 	CmdParams *cmdparams = ( CmdParams * ) v;
@@ -303,33 +477,54 @@
 		cs->name, cs->topics.alltime.runningtotal );
 }
 
+/** @brief ss_cmd_channel
+ *
+ *  CHANNEL command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *    cmdparams->av[0] = optionally POP, KICKS, TOPICS, channel name
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
 int ss_cmd_channel( const CmdParams *cmdparams )
 {
 	channelstat *cs;
 
-	if( cmdparams->ac == 0 ) {
+	if( cmdparams->ac == 0 )
+	{
 		irc_prefmsg( ss_bot, cmdparams->source, "Top 10 Online Channels:" );
 		irc_prefmsg( ss_bot, cmdparams->source, "=======================" );
 		GetChannelStats( top10membershandler, CHANNEL_SORT_MEMBERS, 10, ( UserLevel( cmdparams->source ) < NS_ULEVEL_OPER ), ( void * )cmdparams );
 		irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
-	} else if( !ircstrcasecmp( cmdparams->av[0], "POP" ) ) {
+	}
+	else if( !ircstrcasecmp( cmdparams->av[0], "POP" ) )
+	{
 		irc_prefmsg( ss_bot, cmdparams->source, "Top 10 Join Channels (Ever):" );
 		irc_prefmsg( ss_bot, cmdparams->source, "============================" );
 		GetChannelStats( top10joinshandler, CHANNEL_SORT_JOINS, 10, ( UserLevel( cmdparams->source ) < NS_ULEVEL_OPER ), ( void * )cmdparams );
 		irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
-	} else if( !ircstrcasecmp( cmdparams->av[0], "KICKS" ) ) {
+	}
+	else if( !ircstrcasecmp( cmdparams->av[0], "KICKS" ) )
+	{
 		irc_prefmsg( ss_bot,cmdparams->source, "Top 10 Kick Channels (Ever):" );
 		irc_prefmsg( ss_bot,cmdparams->source, "============================" );
 		GetChannelStats( top10kickshandler, CHANNEL_SORT_KICKS, 10, ( UserLevel( cmdparams->source ) < NS_ULEVEL_OPER ), ( void * )cmdparams );
 		irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
-	} else if( !ircstrcasecmp( cmdparams->av[0], "TOPICS" ) ) {
+	}
+	else if( !ircstrcasecmp( cmdparams->av[0], "TOPICS" ) )
+	{
 		irc_prefmsg( ss_bot, cmdparams->source, "Top 10 Topic Channels (Ever):" );
 		irc_prefmsg( ss_bot, cmdparams->source, "=============================" );
 		GetChannelStats( top10topicshandler, CHANNEL_SORT_TOPICS, 10, ( UserLevel( cmdparams->source ) < NS_ULEVEL_OPER ), ( void * )cmdparams );
 		irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
-	} else {
+	}
+	else
+	{
 		cs = findchanstats( cmdparams->av[0] );
-		if( !cs ) {
+		if( !cs )
+		{
 			irc_prefmsg( ss_bot,cmdparams->source, 
 				"No statistics for %s", cmdparams->av[0] );
 			return NS_SUCCESS;
@@ -356,6 +551,15 @@
 	return NS_SUCCESS;
 }
 
+/** @brief SaveChanStats
+ *
+ *  Save channel stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 void SaveChanStats( void )
 {
 	channelstat *cs;
@@ -366,15 +570,17 @@
 	/* we want to only do 25% each progressive save */
 	limit = ( list_count( channelstatlist ) /4 );
 	cn = list_first( channelstatlist );
-	while( cn ) {
+	while( cn )
+	{
 		cs = lnode_get( cn );
 		/* we are not shutting down, so do progressive save if we have more than 100 channels */
-		if( StatServ.shutdown == 0 && ( limit > 25 ) ) {
-			if( count > limit ) {
+		if( StatServ.shutdown == 0 && ( limit > 25 ) )
+		{
+			if( count > limit )
 				break;
-			}
 			/* calc is we save the entire database in the savedb interval plus 1/2 */
-			if( ( me.now - cs->lastsave ) < PROGCHANTIME ) {
+			if( ( me.now - cs->lastsave ) < PROGCHANTIME )
+			{
 				cn = list_next( channelstatlist, cn );
 				continue;
 			}
@@ -385,12 +591,13 @@
 	}
 }
 
-/* @brief run through database deleting old channels 
- *  
- * 
- * @params nothing
- * 
- * @returns nothing
+/** @brief del_chan
+ *
+ *  Delete old channel stats table row handler
+ *
+ *  @param none
+ *
+ *  @return NS_TRUE if deleted else NS_FALSE
  */
 
 static int del_chan( void *data, int size )
@@ -398,7 +605,8 @@
 	channelstat *cs;
 	
 	cs = ( channelstat * )data;
-	if( ( ( me.now - cs->ts_lastseen ) > StatServ.channeltime ) && ( !cs->c ) ) {
+	if( ( ( me.now - cs->ts_lastseen ) > StatServ.channeltime ) && ( !cs->c ) )
+	{
 		dlog( DEBUG1, "Deleting Channel %s", cs->name );
 		DBADelete( CHANNEL_TABLE, cs->name );
 		/* Delete only one channel per loop */
@@ -407,53 +615,47 @@
 	return NS_FALSE;
 }
 
-int DelOldChan( void *userptr )
+/** @brief DelOldChanTimer
+ *
+ *  Delete old channel stats timer handler
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+int DelOldChanTimer( void *userptr )
 {
 	time_t start;
 
 	start = time( NULL );
 	dlog( DEBUG1, "Deleting old channels" );
 	DBAFetchRows( CHANNEL_TABLE, del_chan );
-	dlog( DEBUG1, "DelOldChan: %d seconds", ( int )( time( NULL ) - start ) );
-	return NS_SUCCESS;
-}
-
-int InitChannelStats( void )
-{
-	channelstatlist = list_create( -1 );
-	if( !channelstatlist )
-	{
-		nlog( LOG_CRITICAL, "Unable to create channel stat list" );
-		return NS_FAILURE;
-	}
-	GetChannelList( AddChannel, NULL );
+	dlog( DEBUG1, "DelOldChanTimer: %d seconds", ( int )( time( NULL ) - start ) );
 	return NS_SUCCESS;
 }
 
-void FiniChannelStats( void )
-{
-	lnode_t *ln;
-	channelstat *cs;
-
-	SaveChanStats();
-	ln = list_first( channelstatlist );
-	while( ln ) {
-		cs = ( channelstat * )lnode_get( ln );
-		ClearChannelModValue( cs->c );
-		ns_free( cs );
-		ln = list_next( channelstatlist, ln );
-	}
-	list_destroy_nodes( channelstatlist );
-	list_destroy( channelstatlist );
-}
+/** @brief GetChannelStats
+ *
+ *  Walk through list passing each channel to handler
+ *
+ *  @param handler pointer to handler function
+ *  @param sortstyle
+ *  @param maxcount
+ *  @param ignorehidden
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
 
 void GetChannelStats( const ChannelStatHandler handler, CHANNEL_SORT sortstyle, int maxcount, int ignorehidden, void *v )
 {
-	int i = 0;
+	int count = 0;
 	lnode_t *ln;
 	channelstat *cs;
 
-	switch( sortstyle ) {
+	switch( sortstyle )
+	{
 		case CHANNEL_SORT_MEMBERS:
 			if( !list_is_sorted( channelstatlist, topcurrentchannel ) )
 				list_sort( channelstatlist, topcurrentchannel );
@@ -475,15 +677,64 @@
 	}
 
 	ln = list_first( channelstatlist );
-	while( ln ) {
+	while( ln )
+	{
 		cs = ( channelstat * )lnode_get( ln );
-		if( i >= maxcount )
+		if( maxcount != -1 && count >= maxcount )
 			break;
 		if( !ignorehidden || !is_hidden_chan( cs->c ) )
 		{
-			i++;
+			count++;
 			handler( cs, v );
 		}
 		ln = list_next( channelstatlist, ln );
 	}
 }
+
+/** @brief InitChannelStats
+ *
+ *  Init channel stats
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS on success, NS_FAILURE on failure
+ */
+
+int InitChannelStats( void )
+{
+	channelstatlist = list_create( -1 );
+	if( !channelstatlist )
+	{
+		nlog( LOG_CRITICAL, "Unable to create channel stat list" );
+		return NS_FAILURE;
+	}
+	GetChannelList( AddChannel, NULL );
+	return NS_SUCCESS;
+}
+
+/** @brief FiniChannelStats
+ *
+ *  Fini channel stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void FiniChannelStats( void )
+{
+	lnode_t *ln;
+	channelstat *cs;
+
+	SaveChanStats();
+	ln = list_first( channelstatlist );
+	while( ln )
+	{
+		cs = ( channelstat * )lnode_get( ln );
+		ClearChannelModValue( cs->c );
+		ns_free( cs );
+		ln = list_next( channelstatlist, ln );
+	}
+	list_destroy_nodes( channelstatlist );
+	list_destroy( channelstatlist );
+}

Modified: trunk/modules/statserv/channel.h
==============================================================================
--- trunk/modules/statserv/channel.h	(original)
+++ trunk/modules/statserv/channel.h	Sat Aug 20 06:59:11 2005
@@ -46,7 +46,7 @@
 	statistic joins;
 }channelstat;
 
-typedef void (*ChannelStatHandler)( const channelstat *cs, const void *v );
+typedef void (*ChannelStatHandler)( channelstat *cs, const void *v );
 
 void GetChannelStats( const ChannelStatHandler handler, CHANNEL_SORT sortstyle, int maxcount, int ignorehidden, const void *v );
 int topcurrentchannel( const void *key1, const void *key2 );
@@ -60,7 +60,7 @@
 int ss_event_topic( const CmdParams *cmdparams );
 int ss_event_kick( const CmdParams *cmdparams );
 int ss_cmd_channel( const CmdParams *cmdparams );
-int DelOldChan( void *v );
+int DelOldChanTimer( void *v );
 int InitChannelStats( void );
 void FiniChannelStats( void );
 void SaveChanStats( void );

Modified: trunk/modules/statserv/htmlstats.c
==============================================================================
--- trunk/modules/statserv/htmlstats.c	(original)
+++ trunk/modules/statserv/htmlstats.c	Sat Aug 20 06:59:11 2005
@@ -35,13 +35,16 @@
 #include <fcntl.h> 
 #endif /* HAVE_FCNTL_H */
 
+/** HTML output handler type */
 typedef void( *htmlhandler )( void );
 
+/** HTML handler table struct */
 typedef struct htmlfunc {
 	char* directive;
 	htmlhandler handler;
 }htmlfunc;
 
+/** HTML handler prototypes */
 static void html_map( void );
 static void html_srvlist( void );
 static void html_srvlistdet( void );
@@ -58,9 +61,12 @@
 static void html_title( void );
 static void html_clientstats( void );
 
+/** Output file pointer */
 static FILE *opf;
+/** Output file template */
 static const char html_template[]="data/index.tpl";
 
+/** HTML handler lookup table */
 static htmlfunc htmlfuncs[]=
 {
 	{"!MAP!", html_map},
@@ -81,17 +87,44 @@
 	{NULL, NULL},
 };
 
+/** @brief html_title
+ *
+ *  HTML handler for title
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_title( void )
 {
 	os_fprintf( opf, "Network Statistics for %s", me.netname );
 }
 
+/** @brief html_version
+ *
+ *  HTML handler for version
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_version( void )
 {
 	os_fputs( me.version, opf );
 }
 
-void put_copyright( void )
+/** @brief put_copyright
+ *
+ *  HTML handler for copyright footer
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+static void put_copyright( void )
 {
 	os_fprintf( opf, "<br><br><center>Statistics last updated at %s<br>", sftime( time( NULL ) ) );
 	os_fprintf( opf, "<b>StatServ Information:</b>\n" );
@@ -102,6 +135,15 @@
 	os_fprintf( opf, "</center></html>\n" );
 }
 
+/** @brief serverlisthandler
+ *
+ *  HTML handler helper for srvlist
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void serverlisthandler( const serverstat *ss, const void *v )
 {
 	os_fprintf( opf, "<tr><td height=\"4\"></td>\n" );
@@ -109,6 +151,15 @@
 		ss->name, ss->name,( ss->s ) ? "ONLINE" : "OFFLINE" );
 }
 
+/** @brief html_srvlist
+ *
+ *  HTML handler for srvlist
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_srvlist( void )
 {
 	os_fprintf( opf, "<table border=0><tr><th colspan = 2>Server name</th></tr>" );
@@ -116,6 +167,15 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief serverlistdetailhandler
+ *
+ *  HTML handler helper for srvlistdet
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void serverlistdetailhandler( const serverstat *ss, const void *v )
 {
 	os_fprintf( opf, "<tr><th><a name=%s>Server:</th><th colspan = 2><b>%s</b></th></tr>\n",
@@ -147,6 +207,15 @@
 		(int)ss->splits.alltime.runningtotal );
 }
 
+/** @brief html_srvlistdet
+ *
+ *  HTML handler for srvlistdet
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_srvlistdet( void )
 {
 	os_fprintf( opf, "<table border=0>" );
@@ -154,6 +223,15 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief html_netstats
+ *
+ *  HTML handler for netstats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_netstats( void )
 {
 	os_fprintf( opf, "<table border = 0>" );
@@ -190,6 +268,15 @@
 	os_fprintf( opf, "<td colspan=\"3\">%d</td></tr></table>\n", me.awaycount );
 }
 
+/** @brief html_dailystats
+ *
+ *  HTML handler for daily
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_dailystats( void )
 {
 	os_fprintf( opf, "<table border = 0>" );
@@ -225,6 +312,15 @@
 	os_fprintf( opf, "</tr></table>\n" );
 }
 
+/** @brief html_weeklystats
+ *
+ *  HTML handler for weekly
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_weeklystats( void )
 {
 	os_fprintf( opf, "<table border = 0>" );
@@ -260,6 +356,15 @@
 	os_fprintf( opf, "</tr></table>\n" );
 }
 
+/** @brief html_monthlystats
+ *
+ *  HTML handler for monthly
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_monthlystats( void )
 {
 	os_fprintf( opf, "<table border = 0>" );
@@ -295,12 +400,30 @@
 	os_fprintf( opf, "</tr></table>\n" );
 }
 
+/** @brief top10membershandler
+ *
+ *  HTML handler helper for top10members
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void top10membershandler( const channelstat *cs, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td align=right>%d</td></tr>\n",
 		cs->name, cs->c->users );
 }
 
+/** @brief html_channeltop10members
+ *
+ *  HTML handler for channeltop10members
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_channeltop10members( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>Channel</th><th align=right>Members</th></tr>" );
@@ -308,12 +431,30 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief top10joinshandler
+ *
+ *  HTML handler helper for top10joins
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void top10joinshandler( const channelstat *cs, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td align=right>%d</td></tr>\n",
 		cs->name, cs->users.alltime.runningtotal );
 }
 
+/** @brief html_channeltop10joins
+ *
+ *  HTML handler for channeltop10joins
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_channeltop10joins( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>Channel</th><th align=right>Total Joins</th></tr>" );
@@ -321,12 +462,30 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief top10kickshandler
+ *
+ *  HTML handler helper for top10kicks
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void top10kickshandler( const channelstat *cs, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td align=right>%d</td></tr>\n",
 		cs->name, cs->kicks.alltime.runningtotal );
 }
 
+/** @brief html_channeltop10kicks
+ *
+ *  HTML handler for channeltop10kicks
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_channeltop10kicks( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>Channel</th><th>Total Kicks</th></tr>" );
@@ -334,12 +493,30 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief top10topicshandler
+ *
+ *  HTML handler helper for top10topics
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void top10topicshandler( const channelstat *cs, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td align=right>%d</td></tr>\n",
 		cs->name, cs->topics.alltime.runningtotal );
 }
 
+/** @brief html_channeltop10topics
+ *
+ *  HTML handler for channeltop10topics
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_channeltop10topics( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>Channel</th><th>Total Topics</th></tr>" );
@@ -347,12 +524,30 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief HTMLClientVersionReport
+ *
+ *  HTML handler helper for ClientVersionReport
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void HTMLClientVersionReport( const ss_ctcp_version *cv, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td align=right>%d</td></tr>\n",
 		cv->name, cv->users.current );
 }
 
+/** @brief html_clientstats
+ *
+ *  HTML handler for clientstats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_clientstats( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>Version</th><th align=right>Count</th></tr>" );
@@ -360,12 +555,30 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief HTMLTLDReport
+ *
+ *  HTML handler helper for TLDReport
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void HTMLTLDReport( const TLD *tld, const void *v )
 {
 	os_fprintf( opf, "<tr><td>%s</td><td>%s</td><td>%3d</td><td>%3d</td><td>%3d</td><td>%3d</td><td>%3d</td></tr>",
 		tld->tld, tld->country, tld->users.current, tld->users.daily.runningtotal, tld->users.weekly.runningtotal, tld->users.monthly.runningtotal, tld->users.alltime.runningtotal );
 }
 
+/** @brief html_tldmap
+ *
+ *  HTML handler for tldmap
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_tldmap( void )
 {
 	os_fprintf( opf, "<table border = 0><tr><th>tld</th><th>Country</th><th>Current</th><th>Day</th><th>Week</th><th>Month</th><th>All Time</th></tr>" );
@@ -373,6 +586,15 @@
 	os_fprintf( opf, "</table>" );
 }
 
+/** @brief get_map
+ *
+ *  HTML recursive handler to generate network map
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void get_map( char *uplink, int level )
 {
 #define MAPBUFSIZE 512
@@ -424,13 +646,31 @@
 	}
 }
 
+/** @brief html_map
+ *
+ *  HTML handler for map
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
 static void html_map( void )
 {
 	get_map( "", 0 );
 	os_fputs( "</TABLE>\n", opf );
 }
 
-int ss_html( void *userptr )
+/** @brief HTMLOutput
+ *
+ *  output HTML file
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void HTMLOutput( void )
 {
 #define HTMLREADBUFSIZE 512
 	static char buf[HTMLREADBUFSIZE];
@@ -443,13 +683,13 @@
 	if( !tpl ) {
 		nlog( LOG_WARNING, "Failed to open StatServ HTML template %s.", html_template );
 		irc_chanalert( ss_bot, "Failed to open StatServ HTML template %s.", html_template );
-		return NS_SUCCESS;
+		return;
 	}
 	opf = os_fopen( StatServ.htmlpath, "wt" );
 	if( !opf ) {
 		nlog( LOG_WARNING, "Failed to open HTML output file %s. Check file permissions.", StatServ.htmlpath );
 		irc_chanalert( ss_bot, "Failed to open HTML output file %s. Check file permissions.", StatServ.htmlpath );
-		return NS_SUCCESS;
+		return;
 	}
 	while( os_fgets( buf, HTMLREADBUFSIZE, tpl ) ) {
 		bufptr = buf;
@@ -479,15 +719,36 @@
     /* update the umode so others can read it and owner can overwrite it */
     chmod(StatServ.htmlpath, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
 #endif /* WIN32 */
+}
 
-
+/** @brief HTMLOutputTimer
+ *
+ *  Timer handler to output HTML file
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+int HTMLOutputTimer( void *userptr )
+{
+	HTMLOutput();
 	return NS_SUCCESS;
 }
 
-int ss_cmd_forcehtml( CmdParams *cmdparams )
+/** @brief ss_cmd_forcehtml
+ *
+ *  FORCEHTML command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_cmd_forcehtml( const CmdParams *cmdparams )
 {
 	nlog( LOG_NOTICE, "%s!%s@%s forced an update of the HTML file.",
 		    cmdparams->source->name, cmdparams->source->user->username, cmdparams->source->user->hostname );
-	ss_html( NULL);
+	HTMLOutput();
 	return NS_SUCCESS;
 }

Modified: trunk/modules/statserv/htmlstats.h
==============================================================================
--- trunk/modules/statserv/htmlstats.h	(original)
+++ trunk/modules/statserv/htmlstats.h	Sat Aug 20 06:59:11 2005
@@ -25,6 +25,7 @@
 #define _HTMLSTATS_H_
 
 int ss_cmd_forcehtml( const CmdParams *cmdparams );
-int ss_html( void *v );
+int HTMLOutputTimer( void *v );
+void HTMLOutput( void );
 
 #endif /* _HTMLSTATS_H_ */

Modified: trunk/modules/statserv/network.c
==============================================================================
--- trunk/modules/statserv/network.c	(original)
+++ trunk/modules/statserv/network.c	Sat Aug 20 06:59:11 2005
@@ -26,8 +26,10 @@
 #include "stats.h"
 #include "network.h"
 
+/** Network table name */
 #define NETWORK_TABLE	"Network"
 
+/** Network stats */
 networkstat networkstats;
 
 /** @brief AverageNetworkStatistics 
@@ -39,13 +41,13 @@
  *  @return none
  */
 
-void AverageNetworkStatistics (void)
+void AverageNetworkStatistics( void )
 {
-	AverageStatistic (&networkstats.servers);
-	AverageStatistic (&networkstats.channels);
-	AverageStatistic (&networkstats.users);
-	AverageStatistic (&networkstats.opers);
-	AverageStatistic (&networkstats.kills);
+	AverageStatistic( &networkstats.servers );
+	AverageStatistic( &networkstats.channels );
+	AverageStatistic( &networkstats.users );
+	AverageStatistic( &networkstats.opers );
+	AverageStatistic( &networkstats.kills );
 }
 
 /** @brief ResetNetworkStatistics
@@ -57,143 +59,289 @@
  *  @return none
  */
 
-void ResetNetworkStatistics (void)
+void ResetNetworkStatistics( void )
 {
-	ResetStatistic (&networkstats.servers);
-	ResetStatistic (&networkstats.channels);
-	ResetStatistic (&networkstats.users);
-	ResetStatistic (&networkstats.opers);
-	ResetStatistic (&networkstats.kills);
+	ResetStatistic( &networkstats.servers );
+	ResetStatistic( &networkstats.channels );
+	ResetStatistic( &networkstats.users );
+	ResetStatistic( &networkstats.opers );
+	ResetStatistic( &networkstats.kills );
 }
 
-void AddNetworkServer (void)
+/** @brief AddNetworkServer
+ *
+ *  Add server to network stats
+ *  Report new record if previous ones beaten
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AddNetworkServer( void )
 {
-	if (IncStatistic (&networkstats.servers)) {
-		announce_record ("\2NEW NETWORK RECORD\2 %d servers on the network",
-			networkstats.servers.current);
-	}
+	if( IncStatistic( &networkstats.servers ) )
+		announce_record( "\2NEW NETWORK RECORD\2 %d servers on the network",
+			networkstats.servers.current );
 }
 
-void DelNetworkServer (void)
+/** @brief DelNetworkServer
+ *
+ *  Delete server from network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void DelNetworkServer( void )
 {
-	DecStatistic (&networkstats.servers);
+	DecStatistic( &networkstats.servers );
 }
 
-void AddNetworkChannel (void)
+/** @brief AddNetworkChannel
+ *
+ *  Add channel to network stats
+ *  Report new record if previous ones beaten
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AddNetworkChannel( void )
 {
-	if (IncStatistic (&networkstats.channels)) {
-		announce_record ("\2NEW NETWORK RECORD\2 %d channels on the network",
-		    networkstats.channels.current);
-	}
+	if( IncStatistic( &networkstats.channels ) )
+		announce_record( "\2NEW NETWORK RECORD\2 %d channels on the network",
+		    networkstats.channels.current );
 }
 
-void DelNetworkChannel (void)
+/** @brief DelNetworkChannel
+ *
+ *  Delete channel from network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void DelNetworkChannel( void )
 {
-	DecStatistic (&networkstats.channels);
+	DecStatistic( &networkstats.channels );
 }
 
-void AddNetworkUser (void)
+/** @brief AddNetworkUser
+ *
+ *  Add user to network stats
+ *  Report new record if previous ones beaten
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AddNetworkUser( void )
 {
-	if (IncStatistic (&networkstats.users)) {
-		announce_record ("\2NEW NETWORK RECORD!\2 %d users on the network",
-			networkstats.users.current);
-	}
+	if( IncStatistic( &networkstats.users ) )
+		announce_record( "\2NEW NETWORK RECORD!\2 %d users on the network",
+			networkstats.users.current );
 }
 
-void DelNetworkUser (void)
+/** @brief DelNetworkUser
+ *
+ *  Delete user from network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void DelNetworkUser( void )
 {
-	DecStatistic (&networkstats.users);
+	DecStatistic( &networkstats.users );
 }
 
-void AddNetworkOper (void)
+/** @brief AddNetworkOper
+ *
+ *  Add oper to network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AddNetworkOper( void )
 {
-	IncStatistic (&networkstats.opers);
+	IncStatistic( &networkstats.opers );
 }
 
-void DelNetworkOper (void)
+/** @brief DelNetworkOper
+ *
+ *  Delete oper from network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void DelNetworkOper( void )
 {
-	DecStatistic (&networkstats.opers);
+	DecStatistic( &networkstats.opers );
 }
 
-void AddNetworkKill (void)
+/** @brief AddNetworkKill
+ *
+ *  Add kill to network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AddNetworkKill( void )
 {
-	IncStatistic (&networkstats.kills);
+	IncStatistic( &networkstats.kills );
 }
 
-void DelNetworkKill (void)
+/** @brief DelNetworkKill
+ *
+ *  Delete kill from network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void DelNetworkKill( void )
 {
-	DecStatistic (&networkstats.kills);
+	DecStatistic( &networkstats.kills );
 }
 
-int ss_cmd_netstats (const CmdParams *cmdparams)
+/** @brief ss_cmd_netstats
+ *
+ *  NETSTATS command handler
+ *  Reports current network statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_cmd_netstats( const CmdParams *cmdparams )
 {
 	SET_SEGV_LOCATION();
-	irc_prefmsg(ss_bot, cmdparams->source, "Network Statistics:-----");
-	irc_prefmsg(ss_bot, cmdparams->source, "Current Users: %d", networkstats.users.current);
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Users: %d [%s]",
-		networkstats.users.alltime.max, sftime(networkstats.users.alltime.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Total Users Connected: %d",
-		networkstats.users.alltime.runningtotal);
-	irc_prefmsg(ss_bot, cmdparams->source, "Current Channels %d", networkstats.channels.current);
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Channels %d [%s]",
-		networkstats.channels.alltime.max, sftime(networkstats.channels.alltime.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Current Opers: %d", networkstats.opers.current);
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Opers: %d [%s]",
-		networkstats.opers.alltime.max, sftime(networkstats.opers.alltime.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Users Set Away: %d", me.awaycount);
-	irc_prefmsg(ss_bot, cmdparams->source, "Current Servers: %d", networkstats.servers.current);
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Servers: %d [%s]",
-		networkstats.servers.alltime.max, sftime(networkstats.servers.alltime.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "End of list.");
+	irc_prefmsg( ss_bot, cmdparams->source, "Network Statistics:-----" );
+	irc_prefmsg( ss_bot, cmdparams->source, "Current Users: %d", networkstats.users.current );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Users: %d [%s]",
+		networkstats.users.alltime.max, sftime( networkstats.users.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Total Users Connected: %d",
+		networkstats.users.alltime.runningtotal );
+	irc_prefmsg( ss_bot, cmdparams->source, "Current Channels %d", networkstats.channels.current );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Channels %d [%s]",
+		networkstats.channels.alltime.max, sftime( networkstats.channels.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Current Opers: %d", networkstats.opers.current );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Opers: %d [%s]",
+		networkstats.opers.alltime.max, sftime( networkstats.opers.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Users Set Away: %d", me.awaycount );
+	irc_prefmsg( ss_bot, cmdparams->source, "Current Servers: %d", networkstats.servers.current );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Servers: %d [%s]",
+		networkstats.servers.alltime.max, sftime( networkstats.servers.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
 	return NS_SUCCESS;
 }
 
-int ss_cmd_daily (const CmdParams *cmdparams)
+/** @brief ss_cmd_daily
+ *
+ *  DAILY command handler
+ *  Reports current daily network statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_cmd_daily( const CmdParams *cmdparams )
 {
 	SET_SEGV_LOCATION();
-	irc_prefmsg(ss_bot, cmdparams->source, "Daily Network Statistics:");
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Servers: %-2d %s",
-		networkstats.servers.daily.max, sftime(networkstats.servers.daily.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Users: %-2d %s", 
-		networkstats.users.daily.max, sftime(networkstats.users.daily.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Channel: %-2d %s", 
-		networkstats.channels.daily.max, sftime(networkstats.channels.daily.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Maximum Opers: %-2d %s", 
-		networkstats.opers.daily.max, sftime(networkstats.opers.daily.ts_max));
-	irc_prefmsg(ss_bot, cmdparams->source, "Total Users Connected: %-2d",
-		networkstats.users.daily.runningtotal);
-	irc_prefmsg(ss_bot, cmdparams->source, "End of Information.");
+	irc_prefmsg( ss_bot, cmdparams->source, "Daily Network Statistics:" );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Servers: %-2d %s",
+		networkstats.servers.daily.max, sftime( networkstats.servers.daily.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Users: %-2d %s", 
+		networkstats.users.daily.max, sftime( networkstats.users.daily.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Channel: %-2d %s", 
+		networkstats.channels.daily.max, sftime( networkstats.channels.daily.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum Opers: %-2d %s", 
+		networkstats.opers.daily.max, sftime( networkstats.opers.daily.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Total Users Connected: %-2d",
+		networkstats.users.daily.runningtotal );
+	irc_prefmsg( ss_bot, cmdparams->source, "End of Information." );
 	return NS_SUCCESS;
 }
 
-void LoadNetworkStats(void) 
+/** @brief LoadNetworkStats
+ *
+ *  Load network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void LoadNetworkStats( void ) 
 {
-	if (DBAFetch (NETWORK_TABLE, NETWORK_TABLE, &networkstats, sizeof (networkstats)) == NS_SUCCESS) 
+	if( DBAFetch( NETWORK_TABLE, NETWORK_TABLE, &networkstats, sizeof( networkstats ) ) == NS_SUCCESS ) 
 	{
-		PostLoadStatistic (&networkstats.servers);
-		PostLoadStatistic (&networkstats.channels);
-		PostLoadStatistic (&networkstats.users);
-		PostLoadStatistic (&networkstats.opers);
-		PostLoadStatistic (&networkstats.kills);
+		PostLoadStatistic( &networkstats.servers );
+		PostLoadStatistic( &networkstats.channels );
+		PostLoadStatistic( &networkstats.users );
+		PostLoadStatistic( &networkstats.opers );
+		PostLoadStatistic( &networkstats.kills );
 	}
 }
 
-void SaveNetworkStats(void)
+/** @brief SaveNetworkStats
+ *
+ *  Save network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void SaveNetworkStats( void )
 {
-	DBAStore (NETWORK_TABLE, NETWORK_TABLE, &networkstats, sizeof(networkstats));
-	PreSaveStatistic (&networkstats.servers);
-	PreSaveStatistic (&networkstats.channels);
-	PreSaveStatistic (&networkstats.users);
-	PreSaveStatistic (&networkstats.opers);
-	PreSaveStatistic (&networkstats.kills);
+	DBAStore( NETWORK_TABLE, NETWORK_TABLE, &networkstats, sizeof( networkstats ) );
+	PreSaveStatistic( &networkstats.servers );
+	PreSaveStatistic( &networkstats.channels );
+	PreSaveStatistic( &networkstats.users );
+	PreSaveStatistic( &networkstats.opers );
+	PreSaveStatistic( &networkstats.kills );
 }
 
-void InitNetworkStats (void)
+/** @brief InitVersionStats
+ *
+ *  Init version stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void InitNetworkStats( void )
 {
 	LoadNetworkStats();
 }
 
-void FiniNetworkStats (void)
+/** @brief FiniNetworkStats
+ *
+ *  Fini network stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void FiniNetworkStats( void )
 {
 	SaveNetworkStats();
 }

Modified: trunk/modules/statserv/server.c
==============================================================================
--- trunk/modules/statserv/server.c	(original)
+++ trunk/modules/statserv/server.c	Sat Aug 20 06:59:11 2005
@@ -27,8 +27,10 @@
 #include "network.h"
 #include "server.h"
 
+/** Server table name */
 #define SERVER_TABLE	"Server"
 
+/** Server hash */
 static hash_t *serverstathash;
 
 /** @brief AverageServerStatistics
@@ -40,17 +42,18 @@
  *  @return none
  */
 
-void AverageServerStatistics (void)
+void AverageServerStatistics( void )
 {
 	serverstat *ss;
 	hscan_t hs;
 	hnode_t *sn;
 
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		AverageStatistic (&ss->users);
-		AverageStatistic (&ss->opers);
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		AverageStatistic( &ss->users );
+		AverageStatistic( &ss->opers );
 	}
 }
 
@@ -63,156 +66,279 @@
  *  @return none
  */
 
-void ResetServerStatistics (void)
+void ResetServerStatistics( void )
 {
 	serverstat *ss;
 	hscan_t hs;
 	hnode_t *sn;
 
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		ResetStatistic (&ss->users);
-		ResetStatistic (&ss->opers);
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		ResetStatistic( &ss->users );
+		ResetStatistic( &ss->opers );
 	}
 }
 
-static serverstat *new_server_stat (const char *name)
+/** @brief new_server_stat
+ *
+ *  Create new server stat
+ *
+ *  @param name of server to search for
+ *
+ *  @return pointer to stat created or NULL if unable
+ */
+
+static serverstat *new_server_stat( const char *name )
 {
 	serverstat *ss;
 
 	SET_SEGV_LOCATION();
-	dlog (DEBUG2, "new_server_stat(%s)", name);
-	if (hash_isfull (serverstathash)) {
-		nlog (LOG_CRITICAL, "StatServ Server hash is full!");
+	dlog( DEBUG2, "new_server_stat( %s )", name );
+	if( hash_isfull( serverstathash ) )
+	{
+		nlog( LOG_CRITICAL, "StatServ Server hash is full!" );
 		return NULL;
 	}
-	ss = ns_calloc (sizeof(serverstat));
-	memcpy (ss->name, name, MAXHOST);
-	hnode_create_insert (serverstathash, ss, ss->name);
+	ss = ns_calloc( sizeof( serverstat ) );
+	memcpy( ss->name, name, MAXHOST );
+	hnode_create_insert( serverstathash, ss, ss->name );
 	return ss;
 }
 
-static serverstat *findserverstats (const char *name)
+/** @brief findserverstats
+ *
+ *  Check list for server
+ *
+ *  @param name of server to search for
+ *
+ *  @return pointer to stat found or NULL if none
+ */
+
+static serverstat *findserverstats( const char *name )
 {
 	serverstat *stats;
 
-	stats = (serverstat *)hnode_find (serverstathash, name);
-	if (!stats) {
-		dlog (DEBUG2, "findserverstats (%s) - not found", name);
-	}
+	stats =( serverstat * )hnode_find( serverstathash, name );
+	if( !stats )
+		dlog( DEBUG2, "findserverstats( %s ) - not found", name );
 	return stats;
 }
 
+/** @brief AddServerUser
+ *
+ *  Add user stat
+ *
+ *  @param u pointer to client to update
+ *
+ *  @return none
+ */
+
 void AddServerUser( const  Client *u )
 {
 	serverstat *ss;
 
-	ss = GetServerModValue (u->uplink);
-	if (IncStatistic (&ss->users)) {
-		announce_record ("\2NEW SERVER RECORD!\2 %d users on server %s",
-			ss->s->server->users, ss->name);
+	ss = GetServerModValue( u->uplink );
+	if( IncStatistic( &ss->users ) )
+	{
+		announce_record( "\2NEW SERVER RECORD!\2 %d users on server %s",
+			ss->s->server->users, ss->name );
 	}
 }
 
-void DelServerUser (const Client *u)
+/** @brief DelServerUser
+ *
+ *  Delete server user
+ *
+ *  @param u pointer to client to update
+ *
+ *  @return none
+ */
+
+void DelServerUser( const Client *u )
 {
 	serverstat *ss;
 
-	ss = GetServerModValue (u->uplink);
-	DecStatistic (&ss->users);
+	ss = GetServerModValue( u->uplink );
+	DecStatistic( &ss->users );
 }
 
-void AddServerOper (const Client *u)
+/** @brief AddServerOper
+ *
+ *  Add server oper
+ *
+ *  @param u pointer to client to update
+ *
+ *  @return none
+ */
+
+void AddServerOper( const Client *u )
 {
 	serverstat *ss;
 
-	ss = GetServerModValue (u->uplink);
-	if (IncStatistic (&ss->opers)) {
-		announce_record ("\2NEW SERVER RECORD!\2 %d opers on %s",
-			ss->opers.alltime.runningtotal, ss->name);
+	ss = GetServerModValue( u->uplink );
+	if( IncStatistic( &ss->opers ) )
+	{
+		announce_record( "\2NEW SERVER RECORD!\2 %d opers on %s",
+			ss->opers.alltime.runningtotal, ss->name );
 	}
 }
 
-void DelServerOper (const Client *u)
+/** @brief DelServerOper
+ *
+ *  Delete server oper
+ *
+ *  @param s pointer to client to update
+ *
+ *  @return none
+ */
+
+void DelServerOper( const Client *u )
 {
 	serverstat *ss;
 
-	ss = GetServerModValue (u->uplink);
-	DecStatistic (&ss->opers);
+	ss = GetServerModValue( u->uplink );
+	DecStatistic( &ss->opers );
 }
 
-static int AddServerStat (Client *s, const void *v)
+/** @brief AddServerStat
+ *
+ *  Add server stat
+ *
+ *  @param s pointer to client to update
+ *  @param v not used
+ *
+ *  @return none
+ */
+
+static int AddServerStat( Client *s, const void *v )
 {
 	serverstat *ss;
 
-	dlog (DEBUG2, "AddServerStat(%s)", s->name);
-	ss = findserverstats (s->name);
-	if (!ss) {
-		ss = new_server_stat (s->name);
-	}
+	dlog( DEBUG2, "AddServerStat( %s )", s->name );
+	ss = findserverstats( s->name );
+	if( !ss )
+		ss = new_server_stat( s->name );
 	ss->ts_start = ss->ts_lastseen = me.now;
-	AddNetworkServer ();
-	SetServerModValue (s, (void *)ss);
+	AddNetworkServer();
+	SetServerModValue( s,( void * )ss );
 	ss->s = s;
 	return NS_FALSE;
 }
 
-int ss_event_server (const CmdParams *cmdparams)
+/** @brief ss_event_server
+ *
+ *  SERVER event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_event_server( const CmdParams *cmdparams )
 {
-	AddServerStat (cmdparams->source, NULL);
+	AddServerStat( cmdparams->source, NULL );
 	return NS_SUCCESS;
 }
 
-static void DelServerStat (Client* s)
+/** @brief DelServerStat
+ *
+ *  Delete server stat
+ *
+ *  @param s pointer to client to update
+ *
+ *  @return none
+ */
+
+static void DelServerStat( Client* s )
 {
 	serverstat *ss;
 	
-	ss = (serverstat *) GetServerModValue (s);
+	ss =( serverstat * ) GetServerModValue( s );
 	ss->ts_lastseen = me.now;
-	IncStatistic (&ss->splits);
-	ClearServerModValue (s);
+	IncStatistic( &ss->splits );
+	ClearServerModValue( s );
 	ss->s = NULL;
 }
 
-int ss_event_squit (const CmdParams *cmdparams)
+/** @brief ss_event_squit
+ *
+ *  SQUIT event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_event_squit( const CmdParams *cmdparams )
 {
-	DelServerStat (cmdparams->source);
-	DelNetworkServer ();
+	DelServerStat( cmdparams->source );
+	DelNetworkServer();
 	return NS_SUCCESS;
 }
 
-static void UpdatePingStats (const Client* s)
+/** @brief UpdatePingStats
+ *
+ *  Update ping stats
+ *
+ *  @param s pointer to client to update
+ *
+ *  @return none
+ */
+
+static void UpdatePingStats( const Client* s )
 {
 	serverstat *ss;
 
-	ss = (serverstat *) GetServerModValue (s);
-	if (!ss)
+	ss =( serverstat * ) GetServerModValue( s );
+	if( !ss )
 		return;
-	if (s->server->ping > ss->highest_ping) {
+	if( s->server->ping > ss->highest_ping )
+	{
 		ss->highest_ping = s->server->ping;
 		ss->ts_highest_ping = me.now;
 	}
-	if (s->server->ping < ss->lowest_ping) {
+	if( s->server->ping < ss->lowest_ping )
+	{
 		ss->lowest_ping = s->server->ping;
 		ss->ts_lowest_ping = me.now;
 	}
 	/* ok, updated the statistics, now lets see if this server is "lagged out" */
-	if (s->server->ping > StatServ.lagtime) {
-		announce_lag ("\2%s\2 is lagged out with a ping of %d", s->name, s->server->ping);
-	}
+	if( s->server->ping > StatServ.lagtime )
+		announce_lag( "\2%s\2 is lagged out with a ping of %d", s->name, s->server->ping );
 }
 
-int ss_event_pong (const CmdParams *cmdparams)
+/** @brief ss_event_pong
+ *
+ *  PONG event handler
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_event_pong( const CmdParams *cmdparams )
 {
 	/* we don't want negative pings! */
-	if (cmdparams->source->server->ping > 0) {
-		UpdatePingStats (cmdparams->source);
-	}
+	if( cmdparams->source->server->ping > 0 )
+		UpdatePingStats( cmdparams->source );
 	return NS_SUCCESS;
 }
 
-static void makemap(const char *uplink, const Client * u, int level)
+/** @brief makemap
+ *
+ *  MAP command handler
+ *  Recursively transverse map and report results
+ *
+ *  @param uplink current point in map
+ *  @param u client to report to
+ *  @param level in map
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+static void makemap( const char *uplink, const Client * u, int level )
 {
 	static char buf[256];
 	hscan_t hs;
@@ -220,260 +346,393 @@
 	Client *s;
 	serverstat *ss;
 	int i;
-	hash_scan_begin (&hs, GetServerHash ());
-	while ((sn = hash_scan_next (&hs))) {
-		s = hnode_get (sn);
-		printf("%d %s %s (%s)\n", level, s->name, s->uplink ? s->uplink->name : "", uplink);
-		ss = (serverstat *) GetServerModValue (s);
-		if ((level == 0) && (s->uplinkname[0] == 0)) {
+	hash_scan_begin( &hs, GetServerHash() );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		s = hnode_get( sn );
+		printf( "%d %s %s( %s )\n", level, s->name, s->uplink ? s->uplink->name : "", uplink );
+		ss =( serverstat * ) GetServerModValue( s );
+		if( ( level == 0 ) &&( s->uplinkname[0] == 0 ) )
+		{
 			/* its the root server */
-			if (StatServ.exclusions && IsExcluded(s)) {
-				makemap(s->name, u, level);
-			}
-			irc_prefmsg (ss_bot, u,
+			if( StatServ.exclusions && IsExcluded( s ) )
+				makemap( s->name, u, level );
+			irc_prefmsg( ss_bot, u,
 				"\2%-45s      [ %d/%d ]   [ %d/%d ]   [ %d/%ld ]",
-				ss->name, s->server->users, (int)ss->users.alltime.max,
-				ss->opers.current, ss->opers.alltime.max, (int)s->server->ping, ss->highest_ping);
-			makemap(s->name, u, level + 1);
-		} else if ((level > 0) && (s->uplink) &&  !ircstrcasecmp (s->uplink->name, uplink)) {
-			if (StatServ.exclusions && IsExcluded(s)) {
-				makemap(s->name, u, level);
-			}
+				ss->name, s->server->users,( int )ss->users.alltime.max,
+				ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
+			makemap( s->name, u, level + 1 );
+		} else if( ( level > 0 ) &&( s->uplink ) &&  !ircstrcasecmp( s->uplink->name, uplink ) )
+		{
+			if( StatServ.exclusions && IsExcluded( s ) )
+				makemap( s->name, u, level );
 			/* its not the root server */
 			if( StatServ.flatmap )
 			{
-				irc_prefmsg (ss_bot, u,
+				irc_prefmsg( ss_bot, u,
 					"\2%-40s      [ %d/%d ]   [ %d/%d ]   [ %d/%ld ]", 
-					ss->name, s->server->users, (int)ss->users.alltime.max,
-					ss->opers.current, ss->opers.alltime.max, (int)s->server->ping, ss->highest_ping);
+					ss->name, s->server->users,( int )ss->users.alltime.max,
+					ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
 			}
 			else
 			{
 				buf[0]='\0';
-				for (i = 1; i < level; i++) {
-					strlcat (buf, "     |", 256);
-				}
-				irc_prefmsg (ss_bot, u,
+				for( i = 1; i < level; i++ )
+					strlcat( buf, "     |", 256 );
+				irc_prefmsg( ss_bot, u,
 					"%s \\_\2%-40s      [ %d/%d ]   [ %d/%d ]   [ %d/%ld ]",
-					buf, ss->name, s->server->users, (int)ss->users.alltime.max,
-					ss->opers.current, ss->opers.alltime.max, (int)s->server->ping, ss->highest_ping);
+					buf, ss->name, s->server->users,( int )ss->users.alltime.max,
+					ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
 			}
-			makemap(s->name, u, level + 1);
+			makemap( s->name, u, level + 1 );
 		}
 	}
 }
 
-int ss_cmd_map (const CmdParams *cmdparams)
+/** @brief ss_cmd_map
+ *
+ *  MAP command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_cmd_map( const CmdParams *cmdparams )
 {
 	SET_SEGV_LOCATION();
-	irc_prefmsg (ss_bot, cmdparams->source, "%-40s      %-10s %-10s %-10s",
-		"\2[NAME]\2", "\2[USERS/MAX]\2", "\2[OPERS/MAX]\2", "\2[LAG/MAX]\2");
-	makemap ("", cmdparams->source, 0);
-	irc_prefmsg (ss_bot, cmdparams->source, "End of list.");
+	irc_prefmsg( ss_bot, cmdparams->source, "%-40s      %-10s %-10s %-10s",
+		"\2[NAME]\2", "\2[USERS/MAX]\2", "\2[OPERS/MAX]\2", "\2[LAG/MAX]\2" );
+	makemap( "", cmdparams->source, 0 );
+	irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
 	return NS_SUCCESS;
 }
 
-int ss_cmd_server_list (const CmdParams *cmdparams)
+/** @brief ss_cmd_server_list
+ *
+ *  SERVER LIST command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+int ss_cmd_server_list( const CmdParams *cmdparams )
 {
 	serverstat *ss;
 	hscan_t hs;
 	hnode_t *sn;
 
-	irc_prefmsg (ss_bot, cmdparams->source, "Server listing:");
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		irc_prefmsg (ss_bot, cmdparams->source, "%s (%s)", ss->name, 
-			(ss->s) ? "ONLINE" : "OFFLINE");
+	irc_prefmsg( ss_bot, cmdparams->source, "Server listing:" );
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		irc_prefmsg( ss_bot, cmdparams->source, "%s( %s )", ss->name, 
+			( ss->s ) ? "ONLINE" : "OFFLINE" );
 	}
-	irc_prefmsg (ss_bot,cmdparams->source, "End of list.");
+	irc_prefmsg( ss_bot,cmdparams->source, "End of list." );
 	return NS_SUCCESS;
 }
 
-static int ss_server_del (const CmdParams *cmdparams)
+/** @brief ss_server_del
+ *
+ *  SERVER DEL command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+static int ss_server_del( const CmdParams *cmdparams )
 {
 	serverstat *ss;
 	hnode_t *node;
 
-	if (cmdparams->ac < 2) {
+	if( cmdparams->ac < 2 )
 		return NS_ERR_NEED_MORE_PARAMS;
-	}
-	ss = findserverstats (cmdparams->av[1]);
-	if (!ss) {
-		irc_prefmsg (ss_bot, cmdparams->source, "%s is not in the database", cmdparams->av[1]);
+	ss = findserverstats( cmdparams->av[1] );
+	if( !ss )
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, "%s is not in the database", cmdparams->av[1] );
 		return NS_SUCCESS;
 	}
-	if (ss->s) {
-		irc_prefmsg (ss_bot, cmdparams->source, 
-			"Cannot remove %s from the database, it is online!!", cmdparams->av[1]);
+	if( ss->s )
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, 
+			"Cannot remove %s from the database, it is online!!", cmdparams->av[1] );
 		return NS_SUCCESS;
 	}
-	node = hash_lookup(serverstathash, cmdparams->av[1]);
-	if (node) {
-		ss = (serverstat *)hnode_get( node );
-		hash_delete (serverstathash, node);
-		hnode_destroy (node);
-		ns_free (ss);
-		irc_prefmsg (ss_bot, cmdparams->source, "Removed %s from the database.",
-			cmdparams->av[1]);
-		nlog (LOG_NOTICE, "%s deleted stats for %s", cmdparams->source->name, cmdparams->av[1]);
+	node = hash_lookup( serverstathash, cmdparams->av[1] );
+	if( node )
+	{
+		ss =( serverstat * )hnode_get( node );
+		hash_delete( serverstathash, node );
+		hnode_destroy( node );
+		ns_free( ss );
+		irc_prefmsg( ss_bot, cmdparams->source, "Removed %s from the database.",
+			cmdparams->av[1] );
+		nlog( LOG_NOTICE, "%s deleted stats for %s", cmdparams->source->name, cmdparams->av[1] );
 	}
 	return NS_SUCCESS;
 }
 
-static int ss_server_copy (const CmdParams *cmdparams)
+/** @brief ss_server_copy
+ *
+ *  SERVER COPY command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+static int ss_server_copy( const CmdParams *cmdparams )
 {
 	serverstat *dest;
 	serverstat *src;
 
-	if (UserLevel(cmdparams->source) < NS_ULEVEL_ADMIN) {
+	if( UserLevel( cmdparams->source ) < NS_ULEVEL_ADMIN )
 		return NS_ERR_NO_PERMISSION;
-	}
-	if (cmdparams->ac < 3) {
+	if( cmdparams->ac < 3 )
 		return NS_ERR_NEED_MORE_PARAMS;
-	}
-	dest = findserverstats (cmdparams->av[2]);
-	if (dest)
+	dest = findserverstats( cmdparams->av[2] );
+	if( dest )
 	{
-		if (dest->s) {
-			irc_prefmsg (ss_bot, cmdparams->source, "Server %s is online!", cmdparams->av[2]);
+		if( dest->s )
+		{
+			irc_prefmsg( ss_bot, cmdparams->source, "Server %s is online!", cmdparams->av[2] );
 			return NS_SUCCESS;
 		}
-		ns_free(dest);
+		ns_free( dest );
 	}
-	src = findserverstats (cmdparams->av[1]);
-	if (!src) {
-		irc_prefmsg (ss_bot, cmdparams->source, "%s is not in the database", 
-			cmdparams->av[1]);
+	src = findserverstats( cmdparams->av[1] );
+	if( !src )
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, "%s is not in the database", 
+			cmdparams->av[1] );
 		return NS_SUCCESS;
 	}
-	memcpy (dest, src, sizeof(serverstat));
-	strlcpy (dest->name, cmdparams->av[2], MAXHOST);
-	irc_prefmsg (ss_bot, cmdparams->source, "Copied database entry for %s to %s", 
-		cmdparams->av[1], cmdparams->av[2]);
-	nlog (LOG_NOTICE, "%s requested STATS COPY %s to %s", cmdparams->source->name, 
-		cmdparams->av[1], cmdparams->av[2]);
+	memcpy( dest, src, sizeof( serverstat ) );
+	strlcpy( dest->name, cmdparams->av[2], MAXHOST );
+	irc_prefmsg( ss_bot, cmdparams->source, "Copied database entry for %s to %s", 
+		cmdparams->av[1], cmdparams->av[2] );
+	nlog( LOG_NOTICE, "%s requested STATS COPY %s to %s", cmdparams->source->name, 
+		cmdparams->av[1], cmdparams->av[2] );
 	return NS_SUCCESS;
 }
 
-static int ss_cmd_server_stats (const CmdParams *cmdparams)
+/** @brief ss_cmd_server_stats
+ *
+ *  SERVER command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
+
+static int ss_cmd_server_stats( const CmdParams *cmdparams )
 {
 	serverstat *ss;
 	Client *s;
 	char *server;
 
-	if (cmdparams->ac == 0) {
+	if( cmdparams->ac == 0 )
 		return NS_ERR_SYNTAX_ERROR;
-	}
 	server = cmdparams->av[0];
-	ss = findserverstats (server);
-	if (!ss) {
-		nlog (LOG_CRITICAL, "Unable to find server statistics for %s", server);
-		irc_prefmsg (ss_bot, cmdparams->source, "Unable to find server statistics for %s", server);
+	ss = findserverstats( server );
+	if( !ss )
+	{
+		nlog( LOG_CRITICAL, "Unable to find server statistics for %s", server );
+		irc_prefmsg( ss_bot, cmdparams->source, "Unable to find server statistics for %s", server );
 		return NS_SUCCESS;
 	}
-	irc_prefmsg (ss_bot, cmdparams->source, "Statistics for \2%s\2 since %s",
-		ss->name, sftime(ss->ts_start));
+	irc_prefmsg( ss_bot, cmdparams->source, "Statistics for \2%s\2 since %s",
+		ss->name, sftime( ss->ts_start ) );
 	s = ss->s;
-	if (!s) {
-		irc_prefmsg (ss_bot, cmdparams->source, "Server Last Seen: %s", 
-			sftime(ss->ts_lastseen));
-	} else {
+	if( !s )
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, "Server Last Seen: %s", 
+			sftime( ss->ts_lastseen ) );
+	}
+	else
+	{
 		/* Calculate uptime as uptime from server plus uptime of NeoStats */
 		time_t uptime;
 
-		uptime = s->server->uptime + (me.now - me.ts_boot);
-		irc_prefmsg (ss_bot, cmdparams->source, "Version: %s", s->version );
-		irc_prefmsg (ss_bot, cmdparams->source, "Uptime:  %ld day%s, %02ld:%02ld:%02ld", ( uptime / TS_ONE_DAY ), ( ( uptime / TS_ONE_DAY ) == 1 ) ? "" : "s", ((uptime / TS_ONE_HOUR) % 24), ((uptime / TS_ONE_MINUTE) % TS_ONE_MINUTE), (uptime % 60) );
-		irc_prefmsg (ss_bot, cmdparams->source, "Current Users: %-3d (%d%%)", 
+		uptime = s->server->uptime +( me.now - me.ts_boot );
+		irc_prefmsg( ss_bot, cmdparams->source, "Version: %s", s->version );
+		irc_prefmsg( ss_bot, cmdparams->source, "Uptime:  %ld day%s, %02ld:%02ld:%02ld",( uptime / TS_ONE_DAY ),( ( uptime / TS_ONE_DAY ) == 1 ) ? "" : "s",( ( uptime / TS_ONE_HOUR ) % 24 ),( ( uptime / TS_ONE_MINUTE ) % TS_ONE_MINUTE ),( uptime % 60 ) );
+		irc_prefmsg( ss_bot, cmdparams->source, "Current Users: %-3d( %d%% )", 
 			s->server->users, 
-			(int)((float) s->server->users / (float) networkstats.users.current * 100));
-	}
-	irc_prefmsg (ss_bot, cmdparams->source, "Maximum users: %-3d at %s",
-		ss->users.alltime.max, sftime(ss->users.alltime.ts_max));
-	irc_prefmsg (ss_bot, cmdparams->source, "Total users connected: %-3d", ss->users.alltime.runningtotal);
-	if (s) {
-		irc_prefmsg (ss_bot, cmdparams->source, "Current opers: %-3d", ss->opers.current);
-	}
-	irc_prefmsg (ss_bot, cmdparams->source, "Maximum opers: %-3d at %s",
-		ss->opers.alltime.max, sftime(ss->opers.alltime.ts_max));
-	irc_prefmsg (ss_bot, cmdparams->source, "IRCop kills: %d", ss->operkills.alltime.runningtotal);
-	irc_prefmsg (ss_bot, cmdparams->source, "Server kills: %d", ss->serverkills.alltime.runningtotal);
-	irc_prefmsg (ss_bot, cmdparams->source, "Lowest ping: %-3d at %s",
-		(int)ss->lowest_ping, sftime(ss->ts_lowest_ping));
-	irc_prefmsg (ss_bot, cmdparams->source, "Higest ping: %-3d at %s",
-		(int)ss->highest_ping, sftime(ss->ts_highest_ping));
-	if (s) {
-		irc_prefmsg (ss_bot, cmdparams->source, "Current Ping: %-3d", (int)s->server->ping);
+			( int )( ( float ) s->server->users /( float ) networkstats.users.current * 100 ) );
 	}
-	if (ss->splits.alltime.runningtotal >= 1) {
-		irc_prefmsg (ss_bot, cmdparams->source, 
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum users: %-3d at %s",
+		ss->users.alltime.max, sftime( ss->users.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Total users connected: %-3d", ss->users.alltime.runningtotal );
+	if( s )
+		irc_prefmsg( ss_bot, cmdparams->source, "Current opers: %-3d", ss->opers.current );
+	irc_prefmsg( ss_bot, cmdparams->source, "Maximum opers: %-3d at %s",
+		ss->opers.alltime.max, sftime( ss->opers.alltime.ts_max ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "IRCop kills: %d", ss->operkills.alltime.runningtotal );
+	irc_prefmsg( ss_bot, cmdparams->source, "Server kills: %d", ss->serverkills.alltime.runningtotal );
+	irc_prefmsg( ss_bot, cmdparams->source, "Lowest ping: %-3d at %s",
+		( int )ss->lowest_ping, sftime( ss->ts_lowest_ping ) );
+	irc_prefmsg( ss_bot, cmdparams->source, "Higest ping: %-3d at %s",
+		( int )ss->highest_ping, sftime( ss->ts_highest_ping ) );
+	if( s )
+		irc_prefmsg( ss_bot, cmdparams->source, "Current Ping: %-3d",( int )s->server->ping );
+	if( ss->splits.alltime.runningtotal >= 1 )
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, 
 			"%s has split from the network %d time %s",
-			ss->name, ss->splits.alltime.runningtotal, (ss->splits.alltime.runningtotal == 1) ? "" : "s");
-	} else {
-		irc_prefmsg (ss_bot, cmdparams->source, "%s has never split from the network.", 
-			ss->name);
+			ss->name, ss->splits.alltime.runningtotal,( ss->splits.alltime.runningtotal == 1 ) ? "" : "s" );
 	}
-	irc_prefmsg (ss_bot, cmdparams->source, "***** End of Statistics *****");
+	else
+	{
+		irc_prefmsg( ss_bot, cmdparams->source, "%s has never split from the network.", 
+			ss->name );
+	}
+	irc_prefmsg( ss_bot, cmdparams->source, "***** End of Statistics *****" );
 	return NS_SUCCESS;
 }
 
+/** @brief ss_cmd_server
+ *
+ *  SERVER command handler
+ *  Reports current statistics to requesting user
+ *
+ *  @param cmdparams
+ *    cmdparams->av[0] = optionally LIST, DEL, COPY
+ *
+ *  @return NS_SUCCESS if succeeds, else NS_FAILURE
+ */
 
-int ss_cmd_server (const CmdParams *cmdparams)
+int ss_cmd_server( const CmdParams *cmdparams )
 {
 	SET_SEGV_LOCATION();
-	if (!ircstrcasecmp (cmdparams->av[0], "LIST")) {
-		return ss_cmd_server_list (cmdparams);
-	} else if (!ircstrcasecmp (cmdparams->av[0], "DEL")) {
-		return ss_server_del (cmdparams);
-	} else if (!ircstrcasecmp (cmdparams->av[0], "COPY")) {
-		return ss_server_copy (cmdparams);	
-	}
-	return ss_cmd_server_stats (cmdparams);
+	if( !ircstrcasecmp( cmdparams->av[0], "LIST" ) )
+		return ss_cmd_server_list( cmdparams );
+	if( !ircstrcasecmp( cmdparams->av[0], "DEL" ) )
+		return ss_server_del( cmdparams );
+	if( !ircstrcasecmp( cmdparams->av[0], "COPY" ) )
+		return ss_server_copy( cmdparams );	
+	return ss_cmd_server_stats( cmdparams );
 }
 
-static void SaveServer (serverstat *ss)
+/** @brief SaveServer
+ *
+ *  Save server stat
+ *
+ *  @param ss pointer to server stat to save
+ *
+ *  @return none
+ */
+
+static void SaveServer( serverstat *ss )
 {
-	dlog (DEBUG1, "Writing statistics to database for %s", ss->name);
-	PreSaveStatistic (&ss->users);
-	PreSaveStatistic (&ss->opers);
-	PreSaveStatistic (&ss->operkills);
-	PreSaveStatistic (&ss->serverkills);
-	PreSaveStatistic (&ss->splits);
-	DBAStore (SERVER_TABLE, ss->name, (void *)ss, sizeof (serverstat));
+	dlog( DEBUG1, "Writing statistics to database for %s", ss->name );
+	PreSaveStatistic( &ss->users );
+	PreSaveStatistic( &ss->opers );
+	PreSaveStatistic( &ss->operkills );
+	PreSaveStatistic( &ss->serverkills );
+	PreSaveStatistic( &ss->splits );
+	DBAStore( SERVER_TABLE, ss->name,( void * )ss, sizeof( serverstat ) );
 }
 
-void SaveServerStats(void)
+/** @brief SaveServerStats
+ *
+ *  Save server stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void SaveServerStats( void )
 {
 	serverstat *ss;
 	hnode_t *sn;
 	hscan_t hs;
 
 	/* run through stats and save them */
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		SaveServer (ss);
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		SaveServer( ss );
 	}
 }
 
-int LoadServerStats(const void *data, const int size) 
+/** @brief LoadVersionStats
+ *
+ *  Table load handler
+ *
+ *  @param data pointer to table row data
+ *  @param size of loaded data
+ *
+ *  @return none
+ */
+
+int LoadServerStats( const void *data, const int size ) 
 {
 	serverstat *ss;
 
-	ss = ns_calloc (sizeof(serverstat));
-	os_memcpy (ss, data, sizeof(serverstat));
-	dlog (DEBUG1, "Loaded statistics for %ss", ss->name);
-	hnode_create_insert (serverstathash, ss, ss->name);
-	PostLoadStatistic (&ss->users);
-	PostLoadStatistic (&ss->opers);
-	PostLoadStatistic (&ss->operkills);
-	PostLoadStatistic (&ss->serverkills);
-	PostLoadStatistic (&ss->splits);
+	if( size != sizeof( serverstat ) )
+	{
+		nlog( LOG_CRITICAL, "server data size invalid" );		
+		return NS_FALSE;
+	}
+	ss = ns_calloc( sizeof( serverstat ) );
+	os_memcpy( ss, data, sizeof( serverstat ) );
+	dlog( DEBUG1, "Loaded statistics for %ss", ss->name );
+	hnode_create_insert( serverstathash, ss, ss->name );
+	PostLoadStatistic( &ss->users );
+	PostLoadStatistic( &ss->opers );
+	PostLoadStatistic( &ss->operkills );
+	PostLoadStatistic( &ss->serverkills );
+	PostLoadStatistic( &ss->splits );
 	return NS_FALSE;
 }
 
-int InitServerStats (void)
+/** @brief GetServerStats
+ *
+ *  Walk through list passing each server to handler
+ *
+ *  @param handler pointer to handler function
+ *  @param v pointer to client to send to
+ *
+ *  @return none
+ */
+
+void GetServerStats( const ServerStatHandler handler, const void *v )
+{
+	serverstat *ss;
+	hnode_t *sn;
+	hscan_t hs;
+
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		handler( ss, v );
+	}
+}
+
+/** @brief InitServerStats
+ *
+ *  Init server stats
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS on success, NS_FAILURE on failure
+ */
+
+int InitServerStats( void )
 {
 	serverstathash = hash_create( -1, 0, 0 );
 	if( !serverstathash )
@@ -481,38 +740,35 @@
 		nlog( LOG_CRITICAL, "Unable to create server hash list" );
 		return NS_FAILURE;
 	}
-	DBAFetchRows (SERVER_TABLE, LoadServerStats);
-	GetServerList (AddServerStat, NULL);
+	DBAFetchRows( SERVER_TABLE, LoadServerStats );
+	GetServerList( AddServerStat, NULL );
 	return NS_SUCCESS;
 }
 
-void FiniServerStats (void)
-{
-	serverstat *ss;
-	hnode_t *sn;
-	hscan_t hs;
-
-	SaveServerStats();
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		ClearServerModValue (ss->s);
-		hash_scan_delete(serverstathash, sn);
-		hnode_destroy(sn);
-		ns_free (ss);
-	}
-	hash_destroy(serverstathash);
-}
+/** @brief FiniServerStats
+ *
+ *  Fini server stats
+ *
+ *  @param none
+ *
+ *  @return none
+ */
 
-void GetServerStats (const ServerStatHandler handler, const void *v)
+void FiniServerStats( void )
 {
 	serverstat *ss;
 	hnode_t *sn;
 	hscan_t hs;
 
-	hash_scan_begin (&hs, serverstathash);
-	while ((sn = hash_scan_next (&hs))) {
-		ss = hnode_get (sn);
-		handler (ss, v);
+	SaveServerStats();
+	hash_scan_begin( &hs, serverstathash );
+	while( ( sn = hash_scan_next( &hs ) ) )
+	{
+		ss = hnode_get( sn );
+		ClearServerModValue( ss->s );
+		hash_scan_delete( serverstathash, sn );
+		hnode_destroy( sn );
+		ns_free( ss );
 	}
+	hash_destroy( serverstathash );
 }

Modified: trunk/modules/statserv/stats.c
==============================================================================
--- trunk/modules/statserv/stats.c	(original)
+++ trunk/modules/statserv/stats.c	Sat Aug 20 06:59:11 2005
@@ -32,86 +32,148 @@
 #include "version.h"
 #include "tld.h"
 
-#define WEEKNUM(t) (((t)->tm_yday + 7 - ((t)->tm_wday)) / 7)
+/** macro to calculate week number from time */
+#define WEEKNUM( t )( ( ( t )->tm_yday + 7 -( ( t )->tm_wday ) ) / 7 )
 
-void PreSaveStatistic (statistic *stat)
+/** @brief PreSaveStatistic
+ *
+ *  Update statistic time prior to save
+ *
+ *  @param stat pointer to stat to update
+ *
+ *  @return none
+ */
+
+void PreSaveStatistic( statistic *stat )
 {
 	struct tm *ltm;
 
-	ltm = localtime (&me.now);
+	ltm = localtime( &me.now );
 	stat->month = ltm->tm_mon;
-	stat->week = WEEKNUM(ltm);
+	stat->week = WEEKNUM( ltm );
 	stat->day = ltm->tm_yday;	
 }
 
-void PostLoadStatistic (statistic *stat)
+/** @brief PostLoadStatistic
+ *
+ *  Update statistic based on time post load
+ *
+ *  @param stat pointer to stat to update
+ *
+ *  @return none
+ */
+
+void PostLoadStatistic( statistic *stat )
 {
 	struct tm *ltm;
 
-	ltm = localtime (&me.now);
+	ltm = localtime( &me.now );
 	stat->current = 0;
-	if (stat->day != ltm->tm_yday) {
-		ResetStatisticEntry (&stat->daily, stat->current);
-	}
+	if( stat->day != ltm->tm_yday )
+		ResetStatisticEntry( &stat->daily, stat->current );
 	/* Only load weekly stats if week not changed */
-	if (stat->week != WEEKNUM(ltm)) {
-		ResetStatisticEntry (&stat->weekly, stat->current);
-	}
+	if( stat->week != WEEKNUM( ltm ) )
+		ResetStatisticEntry( &stat->weekly, stat->current );
 	/* Only load monthly stats if month not changed */
-	if (stat->month != ltm->tm_mon) {
-		ResetStatisticEntry (&stat->monthly, stat->current);
-	}
+	if( stat->month != ltm->tm_mon )
+		ResetStatisticEntry( &stat->monthly, stat->current );
 }
 
-void AverageStatisticEntry (statisticentry *stat, unsigned int current)
-{
-	stat->average = (stat->max + current) / 2;
-}
+/** @brief AverageStatisticEntry
+ *
+ *  Average statistic entry
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *
+ *  @return none
+ */
+
+void AverageStatisticEntry( statisticentry *stat, unsigned int current )
+{
+	stat->average =( stat->max + current ) / 2;
+}
+
+/** @brief AverageStatistic
+ *
+ *  Average statistic
+ *
+ *  @param stat pointer to stat to update
+ *
+ *  @return none
+ */
+
+void AverageStatistic( statistic *stat )
+{
+	AverageStatisticEntry( &stat->daily, stat->current );
+	AverageStatisticEntry( &stat->weekly, stat->current );
+	AverageStatisticEntry( &stat->monthly, stat->current );
+	AverageStatisticEntry( &stat->alltime, stat->current );
+}
+
+/** @brief ResetStatisticEntry
+ *
+ *  Reset statistic entry
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *
+ *  @return none
+ */
 
-void AverageStatistic (statistic *stat)
-{
-	AverageStatisticEntry (&stat->daily, stat->current);
-	AverageStatisticEntry (&stat->weekly, stat->current);
-	AverageStatisticEntry (&stat->monthly, stat->current);
-	AverageStatisticEntry (&stat->alltime, stat->current);
-}
-
-void ResetStatisticEntry (statisticentry *stat, unsigned int current)
+void ResetStatisticEntry( statisticentry *stat, unsigned int current )
 {
 	stat->runningtotal = current;
 	stat->max = current;
 	stat->ts_max = me.now;
 }
 
-void ResetStatistic (statistic *stat)
-{
-	struct tm *ts = gmtime(&me.now);
-
-	/* Reset daily on first hour of day (i.e. midnight) */
-	if (ts->tm_hour == 0) {
-		ResetStatisticEntry (&stat->daily, stat->current);
-	}
+/** @brief ResetStatistic
+ *
+ *  Reset statistic
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *
+ *  @return none
+ */
+
+void ResetStatistic( statistic *stat )
+{
+	struct tm *ts = gmtime( &me.now );
+
+	/* Reset daily on first hour of day( i.e. midnight ) */
+	if( ts->tm_hour == 0 )
+		ResetStatisticEntry( &stat->daily, stat->current );
 	/* Reset weekly on first day of week */
-	if (ts->tm_wday == 0) {
-		ResetStatisticEntry (&stat->weekly, stat->current);
-	}
+	if( ts->tm_wday == 0 )
+		ResetStatisticEntry( &stat->weekly, stat->current );
 	/* Reset monthly on first day of month */
-	if (ts->tm_mday == 1) {
-		ResetStatisticEntry (&stat->monthly, stat->current);
-	}
+	if( ts->tm_mday == 1 )
+		ResetStatisticEntry( &stat->monthly, stat->current );
 }
 
-int IncStatisticEntry (statisticentry *stat, unsigned int current)
+/** @brief IncStatisticEntry
+ *
+ *  increment statistic entry
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *
+ *  @return none
+ */
+
+int IncStatisticEntry( statisticentry *stat, unsigned int current )
 {
 	int isrecord = 0;
 
-	if (current > stat->max)
+	if( current > stat->max )
 	{
 		stat->max = current;
 		stat->ts_max = me.now;
 		isrecord = 1;
 	}
-	else if (current == stat->max)
+	else if( current == stat->max )
 	{
 		stat->ts_max = me.now;
 	}
@@ -119,48 +181,86 @@
 	return isrecord;
 }
 
-int IncStatistic (statistic *stat)
+/** @brief IncStatistic
+ *
+ *  increment statistic
+ *
+ *  @param stat pointer to stat to update
+ *
+ *  @return none
+ */
+
+int IncStatistic( statistic *stat )
 {
 	stat->current++;
-	IncStatisticEntry (&stat->daily, stat->current);
-	IncStatisticEntry (&stat->weekly, stat->current);
-	IncStatisticEntry (&stat->monthly, stat->current);
-	return IncStatisticEntry (&stat->alltime, stat->current);
-}
+	IncStatisticEntry( &stat->daily, stat->current );
+	IncStatisticEntry( &stat->weekly, stat->current );
+	IncStatisticEntry( &stat->monthly, stat->current );
+	return IncStatisticEntry( &stat->alltime, stat->current );
+}
+
+/** @brief DecStatistic
+ *
+ *  decrement statistic
+ *
+ *  @param stat pointer to stat to update
+ *
+ *  @return none
+ */
 
-void DecStatistic (statistic *stat)
+void DecStatistic( statistic *stat )
 {
-	if (stat->current > 0) {
+	if( stat->current > 0 )
 		stat->current--;
-	}
 }
 
-int SetStatisticEntry (statisticentry *stat, unsigned int current, int diff)
+/** @brief SetStatisticEntry
+ *
+ *  set statistic entry
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *  @param diff between stored and current
+ *
+ *  @return none
+ */
+
+int SetStatisticEntry( statisticentry *stat, unsigned int current, int diff )
 {
 	int isrecord = 0;
 
-	if (current > stat->max)
+	if( current > stat->max )
 	{
 		stat->max = current;
 		stat->ts_max = me.now;
 		isrecord = 1;
 	}
-	else if (current == stat->max)
+	else if( current == stat->max )
 	{
 		stat->ts_max = me.now;
 	}
 	/* Only adjust running total if diff is > 0 */
-	if (diff > 0) {
+	if( diff > 0 )
 		stat->runningtotal += diff;
-	}
 	return isrecord;
 }
 
-int SetStatistic (statistic *stat, int current)
+/** @brief SetStatistic
+ *
+ *  set statistic
+ *
+ *  @param stat pointer to stat to update
+ *  @param current value on network
+ *
+ *  @return none
+ */
+
+int SetStatistic( statistic *stat, int current )
 {
 	int diff = 0;
 
-	if (current != stat->current) {
+	if( current != stat->current )
+	{
 		/* Subtract this way so that diff is the correct sign for a 
 		 * later add to running total. I.e.
 		 *   current >  stat->current : +ve
@@ -170,115 +270,219 @@
 		diff = current - stat->current;
 		stat->current = current;
 	}
-	SetStatisticEntry (&stat->daily, stat->current, diff);
-	SetStatisticEntry (&stat->weekly, stat->current, diff);
-	SetStatisticEntry (&stat->monthly, stat->current, diff);
-	return SetStatisticEntry (&stat->alltime, stat->current, diff);
-}
+	SetStatisticEntry( &stat->daily, stat->current, diff );
+	SetStatisticEntry( &stat->weekly, stat->current, diff );
+	SetStatisticEntry( &stat->monthly, stat->current, diff );
+	return SetStatisticEntry( &stat->alltime, stat->current, diff );
+}
+
+/** @brief check_interval
+ *
+ *  check interval between announcements
+ *
+ *  @param none
+ *
+ *  @return NS_TRUE if OK else NS_FALSE
+ */
 
-static int check_interval()
+static int check_interval( void )
 {
 	static time_t lasttime;
 	static int count;
 
-	if (!IsModuleSynched()) {
-		return -1;
+	if( !IsModuleSynched() )
+		return NS_FALSE;
+	if( ( me.now - lasttime ) < StatServ.msginterval  )
+	{
+		if( ++count > StatServ.msglimit )
+			return NS_FALSE;
 	}
-	if ((me.now - lasttime) < StatServ.msginterval ) {
-		if (++count > StatServ.msglimit)
-			return -1;
-	} else {
+	else
+	{
 		lasttime = me.now;
 		count = 0;
 	}
-	return NS_SUCCESS;
+	return NS_TRUE;
 }
 
-static void
-announce(int announcetype, const char *msg)
+/** @brief announce
+ *
+ *  Make announcement of selected type
+ *
+ *  @param announcetype type of announcement
+ *  @param msg to send
+ *
+ *  @return none
+ */
+
+static void announce( int announcetype, const char *msg )
 {
-	switch(announcetype) {
+	switch( announcetype )
+	{
 		case 3:
-			irc_wallops (ss_bot, "%s", msg);
+			irc_wallops( ss_bot, "%s", msg );
 			break;
 		case 2:
-			irc_globops (ss_bot, "%s", msg);
+			irc_globops( ss_bot, "%s", msg );
 			break;
 		case 1:
 		default:
-			irc_chanalert (ss_bot, "%s", msg);
+			irc_chanalert( ss_bot, "%s", msg );
 			break;
 	}
 }
 
-void
-announce_record (const char *msg, ...)
+/** @brief announce_record
+ *
+ *  Make announcement
+ *
+ *  @param msg to send
+ *
+ *  @return none
+ */
+
+void announce_record( const char *msg, ... )
 {
 	static char announce_buf[BUFSIZE];
 	va_list ap;
 
-	if(StatServ.recordalert <= 0 || check_interval() < 0) {
+	if( StatServ.recordalert <= 0 || check_interval() < 0 )
 		return;
-	}
-	va_start (ap, msg);
-	ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
-	va_end (ap);
-	announce(StatServ.recordalert, announce_buf);
-}
+	va_start( ap, msg );
+	ircvsnprintf( announce_buf, BUFSIZE, msg, ap );
+	va_end( ap );
+	announce( StatServ.recordalert, announce_buf );
+}
+
+/** @brief announce_lag
+ *
+ *  Make announcement
+ *
+ *  @param msg to send
+ *
+ *  @return none
+ */
 
-void
-announce_lag(const char *msg, ...)
+void announce_lag( const char *msg, ... )
 {
 	static char announce_buf[BUFSIZE];
 	va_list ap;
 
-	if(StatServ.lagalert <= 0 || check_interval() < 0) {
+	if( StatServ.lagalert <= 0 || check_interval() < 0 )
 		return;
-	}
-	va_start (ap, msg);
-	ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
-	va_end (ap);
-	announce(StatServ.lagalert, announce_buf);
-}
+	va_start( ap, msg );
+	ircvsnprintf( announce_buf, BUFSIZE, msg, ap );
+	va_end( ap );
+	announce( StatServ.lagalert, announce_buf );
+}
+
+/** @brief ResetStatisticsTimer
+ *
+ *  Timer handler for rest of statistics
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
 
-int ResetStatistics (void *userptr)
+int ResetStatisticsTimer( void *userptr )
 {
 	SET_SEGV_LOCATION();
-	dlog (DEBUG1, "Reset Statistics");
-	ResetNetworkStatistics ();
-	ResetServerStatistics ();
-	ResetChannelStatistics ();
-	ResetTLDStatistics ();
+	dlog( DEBUG1, "Reset Statistics" );
+	ResetNetworkStatistics();
+	ResetServerStatistics();
+	ResetChannelStatistics();
+	ResetTLDStatistics();
 	return NS_SUCCESS;
 }
 
-int AverageStatistics (void *userptr)
+/** @brief AverageStatistics
+ *
+ *  Average of statistics
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+void AverageStatistics( void )
+{
+	SET_SEGV_LOCATION();
+	dlog( DEBUG1, "Average Statistics" );
+	AverageNetworkStatistics();
+	AverageServerStatistics();
+	AverageChannelStatistics();
+	AverageTLDStatistics();
+}
+
+/** @brief AverageStatisticsTimer
+ *
+ *  Timer handler for average of statistics
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+int AverageStatisticsTimer( void *userptr )
 {
 	SET_SEGV_LOCATION();
-	dlog (DEBUG1, "Average Statistics");
-	AverageNetworkStatistics ();
-	AverageServerStatistics ();
-	AverageChannelStatistics ();
-	AverageTLDStatistics ();
+	AverageStatistics();
 	return NS_SUCCESS;
 }
 
-int GetAllTimePercent (statistic *stat)
+/** @brief GetAllTimePercent
+ *
+ *  Generate all time stat percent
+ *
+ *  @param stat pointer to stat to calculate
+ *
+ *  @return percent
+ */
+
+int GetAllTimePercent( statistic *stat )
 {
-	return (int)(((float) stat->current / (float) stat->alltime.max) * 100);
+	return( int )( ( ( float ) stat->current / ( float ) stat->alltime.max ) * 100 );
 }
 
-int GetDailyPercent (statistic *stat)
+/** @brief GetDailyPercent
+ *
+ *  Generate daily percent
+ *
+ *  @param stat pointer to stat to calculate
+ *
+ *  @return percent
+ */
+
+int GetDailyPercent( statistic *stat )
 {
-	return (int)(((float) stat->current / (float) stat->daily.max) * 100);
+	return( int )( ( ( float ) stat->current / ( float ) stat->daily.max ) * 100 );
 }
 
-int GetWeeklyPercent (statistic *stat)
+/** @brief GetWeeklyPercent
+ *
+ *  Generate weekly stat percent
+ *
+ *  @param stat pointer to stat to calculate
+ *
+ *  @return percent
+ */
+
+int GetWeeklyPercent( statistic *stat )
 {
-	return (int)(((float) stat->current / (float) stat->weekly.max) * 100);
+	return( int )( ( ( float ) stat->current / ( float ) stat->weekly.max ) * 100 );
 }
 
-int GetMonthlyPercent (statistic *stat)
+/** @brief GetMonthlyPercent
+ *
+ *  Generate monthly stat percent
+ *
+ *  @param stat pointer to stat to calculate
+ *
+ *  @return percent
+ */
+
+int GetMonthlyPercent( statistic *stat )
 {
-	return (int)(((float) stat->current / (float) stat->monthly.max) * 100);
+	return( int )( ( ( float ) stat->current / ( float ) stat->monthly.max ) * 100 );
 }

Modified: trunk/modules/statserv/stats.h
==============================================================================
--- trunk/modules/statserv/stats.h	(original)
+++ trunk/modules/statserv/stats.h	Sat Aug 20 06:59:11 2005
@@ -44,10 +44,11 @@
 
 void AverageStatisticEntry( statisticentry *stat, unsigned int current );
 void AverageStatistic( statistic *stat );
-int AverageStatistics( void *v );
+int AverageStatisticsTimer( void *v );
+void AverageStatistics( void );
 void ResetStatisticEntry( statisticentry *stat, unsigned int current );
 void ResetStatistic( statistic *stat );
-int ResetStatistics( void *v );
+int ResetStatisticsTimer( void *v );
 int IncStatisticEntry( statisticentry *stat, unsigned int current );
 int IncStatistic( statistic *stat );
 void DecStatisticEntry( statisticentry *stat, unsigned int current );

Modified: trunk/modules/statserv/statserv.c
==============================================================================
--- trunk/modules/statserv/statserv.c	(original)
+++ trunk/modules/statserv/statserv.c	Sat Aug 20 06:59:11 2005
@@ -39,10 +39,11 @@
 #include "tld.h"
 #include "htmlstats.h"
 
-static int ss_set_htmltime_cb (CmdParams *cmdparams, SET_REASON reason);
-static int ss_set_exclusions_cb (CmdParams *cmdparams, SET_REASON reason);
-static int ss_set_html_cb (CmdParams *cmdparams, SET_REASON reason);
-static int ss_set_htmlpath_cb (CmdParams *cmdparams, SET_REASON reason);
+/** SET callback prototypes */
+static int ss_set_htmltime_cb( CmdParams *cmdparams, SET_REASON reason );
+static int ss_set_exclusions_cb( CmdParams *cmdparams, SET_REASON reason );
+static int ss_set_html_cb( CmdParams *cmdparams, SET_REASON reason );
+static int ss_set_htmlpath_cb( CmdParams *cmdparams, SET_REASON reason );
 
 /** Bot pointer */
 Bot *ss_bot;
@@ -108,17 +109,17 @@
 /** Bot setting table */
 static bot_setting ss_settings[]=
 {
-	{"HTML",		&StatServ.html,			SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_html, ss_set_html_cb, (void *)0},
-	{"HTMLPATH",	&StatServ.htmlpath,		SET_TYPE_STRING,	0, MAXPATH,		NS_ULEVEL_ADMIN, NULL,		ss_help_set_htmlpath, ss_set_htmlpath_cb, (void *)""},
-	{"HTMLTIME",	&StatServ.htmltime,		SET_TYPE_INT,		600, TS_ONE_HOUR,		NS_ULEVEL_ADMIN, "seconds",	ss_help_set_htmltime, ss_set_htmltime_cb, (void*)TS_ONE_HOUR},
-	{"CHANNELTIME",	&StatServ.channeltime,	SET_TYPE_INT,		TS_ONE_DAY, 18144000,NS_ULEVEL_ADMIN, "seconds",	ss_help_set_channeltime, NULL, (void*)604800},
-	{"MSGINTERVAL",	&StatServ.msginterval,	SET_TYPE_INT,		1, 99, 			NS_ULEVEL_ADMIN, "seconds",	ss_help_set_msginterval, NULL, (void *)TS_ONE_MINUTE},
-	{"MSGLIMIT",	&StatServ.msglimit,		SET_TYPE_INT,		1, 99, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_msglimit, NULL, (void *)5},
-	{"LAGTIME",		&StatServ.lagtime,		SET_TYPE_INT,		1, 256,			NS_ULEVEL_ADMIN, "seconds",	ss_help_set_lagtime, NULL, (void *)30},
-	{"LAGALERT",	&StatServ.lagalert,		SET_TYPE_INT,		0, 3, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_lagalert, NULL, (void *)1},
-	{"RECORDALERT", &StatServ.recordalert,	SET_TYPE_INT,		0, 3, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_recordalert, NULL, (void *)1},
-	{"EXCLUSIONS",	&StatServ.exclusions,	SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_exclusions, ss_set_exclusions_cb, (void *)0},
-	{"FLATMAP",		&StatServ.flatmap,		SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_flatmap, NULL, (void *)0},
+	{"HTML",		&StatServ.html,			SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_html, ss_set_html_cb,( void * )0},
+	{"HTMLPATH",	&StatServ.htmlpath,		SET_TYPE_STRING,	0, MAXPATH,		NS_ULEVEL_ADMIN, NULL,		ss_help_set_htmlpath, ss_set_htmlpath_cb,( void * )""},
+	{"HTMLTIME",	&StatServ.htmltime,		SET_TYPE_INT,		600, TS_ONE_HOUR,		NS_ULEVEL_ADMIN, "seconds",	ss_help_set_htmltime, ss_set_htmltime_cb,( void* )TS_ONE_HOUR},
+	{"CHANNELTIME",	&StatServ.channeltime,	SET_TYPE_INT,		TS_ONE_DAY, 18144000,NS_ULEVEL_ADMIN, "seconds",	ss_help_set_channeltime, NULL,( void* )604800},
+	{"MSGINTERVAL",	&StatServ.msginterval,	SET_TYPE_INT,		1, 99, 			NS_ULEVEL_ADMIN, "seconds",	ss_help_set_msginterval, NULL,( void * )TS_ONE_MINUTE},
+	{"MSGLIMIT",	&StatServ.msglimit,		SET_TYPE_INT,		1, 99, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_msglimit, NULL,( void * )5},
+	{"LAGTIME",		&StatServ.lagtime,		SET_TYPE_INT,		1, 256,			NS_ULEVEL_ADMIN, "seconds",	ss_help_set_lagtime, NULL,( void * )30},
+	{"LAGALERT",	&StatServ.lagalert,		SET_TYPE_INT,		0, 3, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_lagalert, NULL,( void * )1},
+	{"RECORDALERT", &StatServ.recordalert,	SET_TYPE_INT,		0, 3, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_recordalert, NULL,( void * )1},
+	{"EXCLUSIONS",	&StatServ.exclusions,	SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_exclusions, ss_set_exclusions_cb,( void * )0},
+	{"FLATMAP",		&StatServ.flatmap,		SET_TYPE_BOOLEAN,	0, 0, 			NS_ULEVEL_ADMIN, NULL,		ss_help_set_flatmap, NULL,( void * )0},
 	NS_SETTING_END()
 };
 
@@ -135,12 +136,21 @@
 	ss_settings,
 };
 
-int SaveStats(void *userptr)
+/** @brief SaveStatsTimer
+ *
+ *  Save stats timer handler
+ *
+ *  @param none
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+int SaveStatsTimer( void *userptr )
 {
 	SET_SEGV_LOCATION();
-	SaveServerStats ();
-	SaveChanStats ();
-	SaveNetworkStats ();
+	SaveServerStats();
+	SaveChanStats();
+	SaveNetworkStats();
 	return NS_SUCCESS;
 }
 
@@ -160,7 +170,7 @@
 	ModuleConfig( ss_settings );
 	if( StatServ.html && StatServ.htmlpath[0] == 0 )
 	{
-		nlog(LOG_NOTICE, "HTML stats disabled as HTML_PATH is not set");
+		nlog( LOG_NOTICE, "HTML stats disabled as HTML_PATH is not set" );
 		StatServ.html = 0;
 	}
 	InitNetworkStats();
@@ -186,30 +196,31 @@
  *  @return NS_SUCCESS if suceeds else NS_FAILURE
  */
 
-int ModSynch (void)
+int ModSynch( void )
 {
 	SET_SEGV_LOCATION();
 	/* RTA init must be in synch since core does not start 
 	   RTA during the init cycle when NeoStats first boots */
-	ss_bot = AddBot (&ss_botinfo);
-	if (!ss_bot)
+	ss_bot = AddBot( &ss_botinfo );
+	if( !ss_bot )
 		return NS_FAILURE;
 	/* Timer to save the database */
-	AddTimer (TIMER_TYPE_INTERVAL, SaveStats, "SaveStats", DBSAVETIME, NULL);
+	AddTimer( TIMER_TYPE_INTERVAL, SaveStatsTimer, "SaveStatsTimer", DBSAVETIME, NULL );
 	/* Timer to output html */
-	if (StatServ.html) {
-		AddTimer (TIMER_TYPE_INTERVAL, ss_html, "ss_html", StatServ.htmltime, NULL);
+	if( StatServ.html )
+	{
+		AddTimer( TIMER_TYPE_INTERVAL, HTMLOutputTimer, "HTMLOutputTimer", StatServ.htmltime, NULL );
 		/* Initial output at load */
-		ss_html ( NULL );
+		HTMLOutput();
 	}
 	/* Timer to reset timeslice stats */
-	AddTimer (TIMER_TYPE_MIDNIGHT, ResetStatistics, "ResetStatistics", 0, NULL);
+	AddTimer( TIMER_TYPE_MIDNIGHT, ResetStatisticsTimer, "ResetStatisticsTimer", 0, NULL );
 	/* Timer to average stats */
-	AddTimer (TIMER_TYPE_INTERVAL, AverageStatistics, "AverageStatistics", TS_ONE_HOUR, NULL);
+	AddTimer( TIMER_TYPE_INTERVAL, AverageStatisticsTimer, "AverageStatisticsTimer", TS_ONE_HOUR, NULL );
 	/* Initial average at load */
-	AverageStatistics( NULL );
+	AverageStatistics();
 	/* Timer to delete old channels */
-	AddTimer (TIMER_TYPE_INTERVAL, DelOldChan, "DelOldChan", TS_ONE_HOUR, NULL);
+	AddTimer( TIMER_TYPE_INTERVAL, DelOldChanTimer, "DelOldChanTimer", TS_ONE_HOUR, NULL );
 	return NS_SUCCESS;
 }
 
@@ -222,7 +233,7 @@
  *  @return NS_SUCCESS if suceeds else NS_FAILURE
  */
 
-int ModFini (void)
+int ModFini( void )
 {
 	StatServ.shutdown = 1;
 	FiniServerStats();
@@ -233,57 +244,102 @@
 	return NS_SUCCESS;
 }
 
-static int ss_set_html_cb (CmdParams *cmdparams, SET_REASON reason)
+/** @brief ss_set_html_cb
+ *
+ *  Set callback for SET HTML
+ *  Enable or disable html output
+ *
+ *  @cmdparams pointer to commands param struct
+ *  @cmdparams reason for SET
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+static int ss_set_html_cb( CmdParams *cmdparams, SET_REASON reason )
 {
 	if( reason == SET_CHANGE )
 	{
-		if (StatServ.html && StatServ.htmlpath[0] == 0) {
-			irc_prefmsg  (ss_bot, cmdparams->source, 
-				"You need to SET HTMLPATH. HTML output disabled.");
+		if( StatServ.html && StatServ.htmlpath[0] == 0 )
+		{
+			irc_prefmsg ( ss_bot, cmdparams->source, 
+				"You need to SET HTMLPATH. HTML output disabled." );
 			StatServ.html = 0;
 			return NS_SUCCESS;
 		}
-		if (StatServ.html) {
-			AddTimer (TIMER_TYPE_INTERVAL, ss_html, "ss_html", StatServ.htmltime, NULL);
-		} else {
-			DelTimer ("ss_html");
-		}
+		if( StatServ.html )
+			AddTimer( TIMER_TYPE_INTERVAL, HTMLOutputTimer, "HTMLOutputTimer", StatServ.htmltime, NULL );
+		else
+			DelTimer( "HTMLOutputTimer" );
 	}
 	return NS_SUCCESS;
 }
 
-static int ss_set_htmlpath_cb (CmdParams *cmdparams, SET_REASON reason)
+/** @brief ss_set_htmlpath_cb
+ *
+ *  Set callback for SET HTMLPATH
+ *  Change html output path
+ *
+ *  @cmdparams pointer to commands param struct
+ *  @cmdparams reason for SET
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+static int ss_set_htmlpath_cb( CmdParams *cmdparams, SET_REASON reason )
 {
 	FILE *opf;
 
 	if( reason == SET_CHANGE )
 	{
-		opf = os_fopen (StatServ.htmlpath, "wt");
-		if (!opf) {
-			irc_prefmsg (ss_bot, cmdparams->source, 
-				"Failed to open HTML output file %s. Check file permissions. HTML output disabled.", StatServ.htmlpath);
+		opf = os_fopen( StatServ.htmlpath, "wt" );
+		if( !opf )
+		{
+			irc_prefmsg( ss_bot, cmdparams->source, 
+				"Failed to open HTML output file %s. Check file permissions. HTML output disabled.", StatServ.htmlpath );
 			return NS_SUCCESS;
 		}
-		os_fclose (opf);
-		ss_html (NULL);
+		os_fclose( opf );
+		HTMLOutput();
 	}
 	return NS_SUCCESS;
 }
 
-static int ss_set_htmltime_cb (CmdParams *cmdparams, SET_REASON reason)
+/** @brief ss_set_htmltime_cb
+ *
+ *  Set callback for SET HTMLTIME
+ *  Change html output time
+ *
+ *  @cmdparams pointer to commands param struct
+ *  @cmdparams reason for SET
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+static int ss_set_htmltime_cb( CmdParams *cmdparams, SET_REASON reason )
 {
 	if( reason == SET_CHANGE )
 	{
-		SetTimerInterval ("ss_html", StatServ.htmltime);
+		SetTimerInterval( "HTMLOutputTimer", StatServ.htmltime );
 	}
 	return NS_SUCCESS;
 }
 
-static int ss_set_exclusions_cb (CmdParams *cmdparams, SET_REASON reason)
+/** @brief ss_set_exclusions_cb
+ *
+ *  Set callback for exclusions
+ *  Enable or disable exclude event flag
+ *
+ *  @cmdparams pointer to commands param struct
+ *  @cmdparams reason for SET
+ *
+ *  @return NS_SUCCESS if suceeds else NS_FAILURE
+ */
+
+static int ss_set_exclusions_cb( CmdParams *cmdparams, SET_REASON reason )
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		SetAllEventFlags (EVENT_FLAG_USE_EXCLUDE, StatServ.exclusions);
+		SetAllEventFlags( EVENT_FLAG_USE_EXCLUDE, StatServ.exclusions );
 	}
 	return NS_SUCCESS;
 }

Modified: trunk/modules/statserv/tld.c
==============================================================================
--- trunk/modules/statserv/tld.c	(original)
+++ trunk/modules/statserv/tld.c	Sat Aug 20 06:59:11 2005
@@ -35,9 +35,12 @@
 #include "GeoIP.h"
 #include "GeoIPCity.h"
 
+/** TLD table name */
 #define TLD_TABLE		"TLD"
+/** Unknown entry */
 #define UNKNOWN_COUNTRY_CODE	"???"
 
+/** TLD list */
 static list_t *tldstatlist;
 static GeoIP *gi;
 
@@ -56,12 +59,15 @@
 	TLD *t;
 	
 	tn = list_first( tldstatlist );
-	while( tn != NULL ) {
+	while( tn != NULL )
+	{
 		t = lnode_get( tn );
 		ResetStatistic( &t->users );
-		if( t->users.current == 0 ) {
+		if( t->users.current == 0 )
+		{
 			/* don't delete the tld entry ??? as its our "unknown" entry */
-			if( ircstrcasecmp( t->tld, UNKNOWN_COUNTRY_CODE ) ) {
+			if( ircstrcasecmp( t->tld, UNKNOWN_COUNTRY_CODE ) )
+			{
 				tn2 = list_next( tldstatlist, tn );
 				ns_free( t );
 				list_delete( tldstatlist, tn );
@@ -259,6 +265,20 @@
 	return NS_SUCCESS;
 }
 
+/** @brief SaveTLDStat
+ *
+ *  Save TLD stat
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+
+static void SaveTLDStat( const TLD *tld, const void *v )
+{
+	DBAStore( TLD_TABLE, tld->tld, ( void * )v, sizeof( TLD ) );
+}
+
 /** @brief SaveTLDStats
  *
  *  Save TLD stats
@@ -270,16 +290,7 @@
 
 void SaveTLDStats( void )
 {
-	lnode_t *tn;
-	TLD *t;
-	
-	tn = list_first( tldstatlist );
-	while( tn != NULL )
-	{
-		t = lnode_get( tn );
-		DBAStore( TLD_TABLE, t->tld, ( void * )t, sizeof( TLD ) );
-		tn = list_next( tldstatlist, tn );
-	}
+	GetTLDStats( SaveTLDStat, NULL );
 }
 
 /** @brief new_tld

Modified: trunk/modules/statserv/user.c
==============================================================================
--- trunk/modules/statserv/user.c	(original)
+++ trunk/modules/statserv/user.c	Sat Aug 20 06:59:11 2005
@@ -85,12 +85,15 @@
 
 	SET_SEGV_LOCATION();
 	ss = GetServerModValue( cmdparams->source->uplink );
-	if( !ss ) {
+	if( !ss )
+	{
 		nlog( LOG_WARNING, "Unable to find stats for %s", cmdparams->source->uplink->name );
 		return NS_SUCCESS;
 	}
-	while( *modes ) {
-		switch( *modes ) {
+	while( *modes )
+	{
+		switch( *modes )
+		{
 		case '+':
 			add = 1;
 			break;
@@ -99,12 +102,16 @@
 			break;
 		case 'O':
 		case 'o':
-			if( add ) {
+			if( add )
+			{
 				dlog( DEBUG1, "Increasing OperCount for %s", ss->name );
 				AddNetworkOper();
 				AddServerOper( cmdparams->source );
-			} else {
-				if( IsOper( cmdparams->source ) ) {
+			}
+			else
+			{
+				if( IsOper( cmdparams->source ) )
+				{
 					dlog( DEBUG1, "Decreasing OperCount for %s", ss->name );
 					DelNetworkOper();
 					DelServerOper( cmdparams->source );
@@ -210,10 +217,13 @@
 		return NS_FALSE;
 	if( operlistaway && IsAway( u ) )
 		return NS_FALSE;
-	if( !operlistserver ) {
+	if( !operlistserver )
+	{
 		irc_prefmsg( ss_bot, listu, "%-15s %-15s %-10d",
 			u->name, u->uplink->name, UserLevel( u ) );
-	} else {
+	}
+	else
+	{
 		if( ircstrcasecmp( operlistserver, u->uplink->name ) )
 			return NS_FALSE;
 		irc_prefmsg( ss_bot, listu, "%-15s %-15s %-10d", 
@@ -239,21 +249,25 @@
 	SET_SEGV_LOCATION();
 	operlistaway = 0;
 	operlistserver = NULL;
-	if( cmdparams->ac == 0 ) {
+	if( cmdparams->ac == 0 )
+	{
 		irc_prefmsg( ss_bot, cmdparams->source, "Online IRCops:" );
 		irc_prefmsg( ss_bot, cmdparams->source, "ID  %-15s %-15s %-10s", 
 			"Nick", "Server", "Level" );
 	}
-	if( cmdparams->ac != 0 ) {
+	if( cmdparams->ac != 0 )
+	{
 		flags = cmdparams->av[0];
 		operlistserver = cmdparams->av[1];
 	}
-	if( flags && !ircstrcasecmp( flags, "NOAWAY" ) ) {
+	if( flags && !ircstrcasecmp( flags, "NOAWAY" ) )
+	{
 		operlistaway = 1;
 		flags = NULL;
 		irc_prefmsg( ss_bot, cmdparams->source, "Online IRCops( not away ):" );
 	}
-	if( !operlistaway && flags && strchr( flags, '.' ) ) {
+	if( !operlistaway && flags && strchr( flags, '.' ) )
+	{
 		operlistserver = flags;
 		irc_prefmsg( ss_bot, cmdparams->source, "Online IRCops on server %s", operlistserver );
 	}
@@ -278,9 +292,8 @@
 	Client *listu;
 
 	listu = ( Client * )v;
-	if IsBot( u ) { 
+	if IsBot( u )
 		irc_prefmsg( ss_bot, listu, "%-15s %s", u->name, u->uplink->name );
-	}
 	return NS_FALSE;
 }
 

Modified: trunk/modules/statserv/version.c
==============================================================================
--- trunk/modules/statserv/version.c	(original)
+++ trunk/modules/statserv/version.c	Sat Aug 20 06:59:11 2005
@@ -26,8 +26,10 @@
 #include "stats.h"
 #include "version.h"
 
+/** CTCP version table name */
 #define CTCPVERSION_TABLE "CTCPVERSION"
 
+/** Client version list */
 static list_t *ctcp_version_list;
 
 /** @brief topcurrentversions
@@ -68,6 +70,20 @@
 	return cv;
 }
 
+/** @brief SaveClientVersion
+ *
+ *  Save client version stat
+ *
+ *  @param none
+ *
+ *  @return none
+ */
+static void SaveClientVersion( const ss_ctcp_version *cv, const void *v )
+{
+	DBAStore( CTCPVERSION_TABLE, cv->name,( void *)cv, sizeof( ss_ctcp_version));
+	dlog( DEBUG2, "Save version %s", cv->name );
+}
+
 /** @brief SaveClientVersions
  *
  *  Save client version stats
@@ -79,17 +95,7 @@
 
 static void SaveClientVersions( void )
 {
-	ss_ctcp_version *cv;
-	lnode_t *cn;
-	
-	cn = list_first( ctcp_version_list );
-	while( cn != NULL )
-	{
-		cv = ( ss_ctcp_version * ) lnode_get( cn );
-		DBAStore( CTCPVERSION_TABLE, cv->name,( void *)cv, sizeof( ss_ctcp_version));
-		dlog( DEBUG2, "Save version %s", cv->name );
-		cn = list_next( ctcp_version_list, cn );
-	}
+	GetClientStats( SaveClientVersion, -1, NULL );
 }
 
 /** @brief new_ctcpversion
@@ -161,17 +167,20 @@
 {
 	ss_ctcp_version *cv;
 	lnode_t *cn;
-	int i;
+	int count = 0;
 	
 	if( !list_is_sorted( ctcp_version_list, topcurrentversions ) )
 		list_sort( ctcp_version_list, topcurrentversions );
 	cn = list_first( ctcp_version_list );
-	for( i = 0; i < limit && cn; i++ )
+	while( cn != NULL )
 	{
-		cv = lnode_get( cn );
+		cv = ( ss_ctcp_version * ) lnode_get( cn );
 		handler( cv, v );	
 		cn = list_next( ctcp_version_list, cn );
+		if( limit != -1 && count >= limit )
+			break;
 	}
+
 }
 
 /** @brief ss_cmd_ctcpversion

Modified: trunk/src/nsdba.c
==============================================================================
--- trunk/src/nsdba.c	(original)
+++ trunk/src/nsdba.c	Sat Aug 20 06:59:11 2005
@@ -47,10 +47,10 @@
 
 static void *( *DBMOpenTable )( const char *name );
 static int ( *DBMCloseTable )( void *handle );
-static int ( *DBMGetData )( void *handle, char *key, void *data, int size );
-static int ( *DBMSetData )( void *handle, char *key, void *data, int size );
+static int ( *DBMGetData )( void *handle, const char *key, void *data, int size );
+static int ( *DBMSetData )( void *handle, const char *key, void *data, int size );
 static int ( *DBMGetTableRows )( void *handle, DBRowHandler handler );
-static int ( *DBMDelData )( void *handle, char *key );
+static int ( *DBMDelData )( void *handle, const char *key );
 
 static dbm_sym dbm_sym_table[] = 
 {
@@ -356,7 +356,7 @@
  *  @return NS_SUCCESS if succeeds, NS_FAILURE if not 
  */
 
-int DBAFetch( const char *table, char *key, void *data, int size )
+int DBAFetch( const char *table, const char *key, void *data, int size )
 {
 	tableentry *tbe;
 
@@ -379,7 +379,7 @@
  *  @return NS_SUCCESS if succeeds, NS_FAILURE if not 
  */
 
-int DBAStore( const char *table, char *key, void *data, int size )
+int DBAStore( const char *table, const char *key, void *data, int size )
 {
 	tableentry *tbe;
 
@@ -421,7 +421,7 @@
  *  @return NS_SUCCESS if succeeds, NS_FAILURE if not 
  */
 
-int DBADelete( const char *table, char *key )
+int DBADelete( const char *table, const char *key )
 {
 	tableentry *tbe;