[NeoStats-Devel] [Commits] r29 - trunk

[email protected]
Newsgroups gmane.comp.neostats.devel
Message-ID <[email protected]>
Author: DNB
Date: Tue May 10 11:30:03 2005
New Revision: 29

Modified:
   trunk/ChangeLog
   trunk/events.c
   trunk/seen.c
   trunk/seenserv.c
   trunk/seenserv.h
   trunk/seenserv_help.c
Log:
code tidyups
add check for enabled channel to join/part pseudo client
remove verbose setting
add segfault location s and debug info


Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog	(original)
+++ trunk/ChangeLog	Tue May 10 11:30:03 2005
@@ -2,6 +2,9 @@
 Fish (F), Mark (M), DeadNotBuried (D)
 ==============================================================================
 3.0.a3-dev
+ - have Pseudo client join/part Channel when Seen Channel Enabled/Disabled (D)
+ - remove verbose setting (D)
+ - add segfault and debug reporting (D)
  - Add seen_report helper function to manage messaging. (M)
  - Renamed STATS command to STATUS to match other modules. (M)
  - Optimise limit and expiry checks. (M)

Modified: trunk/events.c
==============================================================================
--- trunk/events.c	(original)
+++ trunk/events.c	Tue May 10 11:30:03 2005
@@ -29,13 +29,12 @@
 /*
  * Signon Events
 */
-int SeenSignon (CmdParams *cmdparams) {
-	if (ModIsUserExcluded(cmdparams->source)) {
+int SeenSignon (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (ModIsUserExcluded(cmdparams->source))
 		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Signon Event (%s)", cmdparams->source->name);
-	}
+	dlog( DEBUG10, "Recording Signon Event (%s)", cmdparams->source->name);
 	addseenentry(cmdparams->source->name, cmdparams->source->user->userhostmask, cmdparams->source->user->uservhostmask, NULL, SS_CONNECTED);
 	return NS_SUCCESS;
 }
@@ -43,13 +42,12 @@
 /*
  * Quit Events
 */
-int SeenQuit (CmdParams *cmdparams) {
-	if (ModIsUserExcluded(cmdparams->source)) {
+int SeenQuit (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (ModIsUserExcluded(cmdparams->source))
 		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Quit Event (%s (%s))", cmdparams->source->user->uservhostmask, cmdparams->param);
-	}
+	dlog( DEBUG10, "Recording Quit Event (%s (%s))", cmdparams->source->user->uservhostmask, cmdparams->param);
 	ircsnprintf(tmpmsg, SS_MESSAGESIZE, "(%s)", cmdparams->param);
 	addseenentry(cmdparams->source->name, cmdparams->source->user->userhostmask, cmdparams->source->user->uservhostmask, tmpmsg, SS_QUIT);
 	return NS_SUCCESS;
@@ -58,13 +56,12 @@
 /*
  * Kill Events
 */
-int SeenKill (CmdParams *cmdparams) {
-	if (ModIsUserExcluded(cmdparams->target)) {
+int SeenKill (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (ModIsUserExcluded(cmdparams->target))
 		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Kill Event (%s by %s (%s))", cmdparams->target->user->uservhostmask, cmdparams->source->name, cmdparams->param);
-	}
+	dlog( DEBUG10, "Recording Kill Event (%s by %s (%s))", cmdparams->target->user->uservhostmask, cmdparams->source->name, cmdparams->param);
 	ircsnprintf(tmpmsg, SS_MESSAGESIZE, "by %s (%s)", cmdparams->source->name, cmdparams->param);
 	addseenentry(cmdparams->target->name, cmdparams->target->user->userhostmask, cmdparams->target->user->uservhostmask, tmpmsg, SS_KILLED);
 	return NS_SUCCESS;
@@ -73,13 +70,12 @@
 /*
  * Nick Events
 */
-int SeenNickChange (CmdParams *cmdparams) {
-	if (ModIsUserExcluded(cmdparams->source)) {
+int SeenNickChange (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (ModIsUserExcluded(cmdparams->source))
 		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Nick Change Event (%s to %s)", cmdparams->param, cmdparams->source->user->uservhostmask);
-	}
+	dlog( DEBUG10, "Recording Nick Change Event (%s to %s)", cmdparams->param, cmdparams->source->user->uservhostmask);
 	ircsnprintf(tmpmsg, SS_MESSAGESIZE, "%s!%s@%s", cmdparams->param, cmdparams->source->user->username, cmdparams->source->user->hostname);
 	ircsnprintf(tmpmsg2, SS_MESSAGESIZE, "%s!%s@%s", cmdparams->param, cmdparams->source->user->username, cmdparams->source->user->vhost);
 	addseenentry(cmdparams->param, tmpmsg, tmpmsg2, cmdparams->source->name, SS_NICKCHANGE);
@@ -89,19 +85,12 @@
 /*
  * Join Events
 */
-int SeenJoinChan (CmdParams *cmdparams) {
-	if (is_hidden_chan(cmdparams->channel)) {
-		return NS_SUCCESS;
-	}
-	if (ModIsUserExcluded(cmdparams->source)) {
+int SeenJoinChan (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (is_hidden_chan(cmdparams->channel) || ModIsUserExcluded(cmdparams->source) || ModIsChannelExcluded(cmdparams->channel))
 		return NS_SUCCESS;
-	}
-	if (ModIsChannelExcluded(cmdparams->channel)) {
-		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Join Event (%s %s)", cmdparams->source->user->uservhostmask, cmdparams->channel->name);
-	}
+	dlog( DEBUG10, "Recording Join Event (%s %s)", cmdparams->source->user->uservhostmask, cmdparams->channel->name);
 	addseenentry(cmdparams->source->name, cmdparams->source->user->userhostmask, cmdparams->source->user->uservhostmask, cmdparams->channel->name, SS_JOIN);
 	return NS_SUCCESS;
 }
@@ -109,19 +98,12 @@
 /*
  * Part Events
 */
-int SeenPartChan (CmdParams *cmdparams) {
-	if (is_hidden_chan(cmdparams->channel)) {
-		return NS_SUCCESS;
-	}
-	if (ModIsUserExcluded(cmdparams->source)) {
+int SeenPartChan (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (is_hidden_chan(cmdparams->channel) || ModIsUserExcluded(cmdparams->source) || ModIsChannelExcluded(cmdparams->channel))
 		return NS_SUCCESS;
-	}
-	if (ModIsChannelExcluded(cmdparams->channel)) {
-		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Part Event (%s %s (%s))", cmdparams->source->user->uservhostmask, cmdparams->channel->name, cmdparams->param ? cmdparams->param : "");
-	}
+	dlog( DEBUG10, "Recording Part Event (%s %s (%s))", cmdparams->source->user->uservhostmask, cmdparams->channel->name, cmdparams->param ? cmdparams->param : "");
 	if (cmdparams->param) {
 		ircsnprintf(tmpmsg, SS_MESSAGESIZE, "%s (%s)", cmdparams->channel->name, cmdparams->param);
 	} else {
@@ -134,19 +116,12 @@
 /*
  * Kick Events
 */
-int SeenKicked (CmdParams *cmdparams) {
-	if (is_hidden_chan(cmdparams->channel)) {
+int SeenKicked (CmdParams *cmdparams) 
+{
+	SET_SEGV_LOCATION();
+	if (is_hidden_chan(cmdparams->channel) || ModIsUserExcluded(cmdparams->target) || ModIsChannelExcluded(cmdparams->channel))
 		return NS_SUCCESS;
-	}
-	if (ModIsUserExcluded(cmdparams->target)) {
-		return NS_SUCCESS;
-	}
-	if (ModIsChannelExcluded(cmdparams->channel)) {
-		return NS_SUCCESS;
-	}
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Recording Kick Event (%s by %s from %s (%s))", cmdparams->target->user->uservhostmask, cmdparams->source->name, cmdparams->channel->name, cmdparams->param);
-	}
+	dlog( DEBUG10, "Recording Kick Event (%s by %s from %s (%s))", cmdparams->target->user->uservhostmask, cmdparams->source->name, cmdparams->channel->name, cmdparams->param);
 	ircsnprintf(tmpmsg, SS_MESSAGESIZE, "%s by %s (%s)", cmdparams->channel->name, cmdparams->source->name, cmdparams->param);
 	addseenentry(cmdparams->target->name, cmdparams->target->user->userhostmask, cmdparams->target->user->uservhostmask, tmpmsg, SS_KICKED);
 	return NS_SUCCESS;

Modified: trunk/seen.c
==============================================================================
--- trunk/seen.c	(original)
+++ trunk/seen.c	Tue May 10 11:30:03 2005
@@ -25,12 +25,12 @@
 
 static list_t *seenlist;
 
-static char ttxt[4][12];
-static char dt[SS_GENCHARLEN];
+static char timetext[4][12];
+static char combinedtimetext[SS_GENCHARLEN];
 static char matchstr[USERHOSTLEN];
-static char cc[SS_GENCHARLEN];
-static char senf[5][MAXNICK+3];
-static char nickstr[SS_MESSAGESIZE];
+static char currentlyconnectedtext[SS_GENCHARLEN];
+static char seenentrynick[5][MAXNICK+3];
+static char matchednickstr[SS_MESSAGESIZE];
 
 /** @brief findnick
  *
@@ -44,26 +44,47 @@
 
 int findnick( const void *key1, const void *key2 )
 {
-	const SeenData *sd = key1;
-	return( ircstrcasecmp( sd->nick,( char * )key2 ) );
+	SeenData *sd = ( SeenData * ) key1;
+	return ircstrcasecmp( sd->nick, key2 );
 }
 
 /*
  *  Removes SeenData for nickname if exists
 */
-void removepreviousnick(char *nn)
+void removepreviousnick(char *nick)
 {
 	lnode_t *ln;
 	SeenData *sd;
 
-	ln = lnode_find( seenlist, nn, findnick );
-	if( ln )
+/*		for some reason this bit segfaults, so commented out for now
+		and manually searching for previous entries on the list
+		(it's not just the DBADelete)
+
+	ln = lnode_find( seenlist, nick, findnick );
+	if (!ln)
+		return;
+	sd = lnode_get(ln);
+	 * DBADelete( "seendata", sd->nick);
+	ns_free(sd);
+	list_delete(seenlist, ln);
+	lnode_destroy(ln);
+*/
+	ln = list_first( seenlist );
+	while ( ln )
 	{
-		sd = lnode_get(ln);
-		DBADelete( "seendata", sd->nick);
-		ns_free(sd);
-		list_delete(seenlist, ln);
-		lnode_destroy(ln);
+		sd = lnode_get( ln );
+		if (!ircstrcasecmp(nick, sd->nick)) 
+		{
+			/* commented out the delete due to segfaults
+			 *
+			 *  DBADelete( "seendata", sd->nick);
+			 */
+			ns_free( sd );
+			list_delete( seenlist, ln );
+			lnode_destroy( ln );
+			ln = list_last( seenlist );
+		}
+		ln = list_next( seenlist, ln );
 	}
 }
 
@@ -92,24 +113,25 @@
 */
 void checkseenlistlimit(void)
 {
-	int current;
-	int maxage;
+	int currentlistcount;
+	int maxageallowed;
 	lnode_t *ln, *ln2;
 	SeenData *sd;
 
-	current = list_count(seenlist);
-	maxage = me.now - ( SeenServ.expiretime * 86400 );
+	currentlistcount = list_count(seenlist);
+	maxageallowed = me.now - ( SeenServ.expiretime * 86400 );
 	ln = list_first( seenlist );
 	sd = lnode_get( ln );
-	while( ( current > SeenServ.maxentries ) || ( SeenServ.expiretime > 0 && ( maxage > sd->seentime ) ) )
+	while( ( currentlistcount > SeenServ.maxentries ) || ( SeenServ.expiretime > 0 && ( maxageallowed > sd->seentime ) ) )
 	{
 		ln2 = list_next( seenlist, ln );
 		DBADelete( "seendata", sd->nick );
 		ns_free( sd );
 		list_delete( seenlist, ln );
 		lnode_destroy( ln );
-		sd = lnode_get( ln2 );
-		current --;
+		ln = ln2;
+		sd = lnode_get( ln );
+		currentlistcount --;
 	}
 }
 
@@ -149,11 +171,8 @@
 	SeenData *sd;
 
 	/*
-	 * lnode_destroy_auto doesn't seem to free the memory
-	 * (could be wrong here, but memory usage stayed up on
-	 * unloading module, and increased even more when loading)
-	 * so loop through and make sure memory is free.
-	 * since it uses lots of memory for big lists.
+	 * Destroy the Seen List just to ensure
+	 * all memory is free'd
 	*/
 	ln = list_first(seenlist);
 	while( ln )
@@ -173,8 +192,7 @@
 */
 int sns_cmd_seenhost(CmdParams *cmdparams) 
 {
-	if ( SeenServ.verbose == 1 )
-		irc_chanalert (sns_bot, "Seen Command used by %s (SEEN %s)", cmdparams->source->name, cmdparams->av[0]);
+	SET_SEGV_LOCATION();
 	return CheckSeenData(cmdparams, SS_CHECK_WILDCARD);
 }
 
@@ -183,8 +201,7 @@
 */
 int sns_cmd_seennick(CmdParams *cmdparams)
 {
-	if ( SeenServ.verbose == 1 )
-		irc_chanalert (sns_bot, "SeenNick Command used by %s (SEENNICK %s)", cmdparams->source->name, cmdparams->av[0]);
+	SET_SEGV_LOCATION();
 	return CheckSeenData(cmdparams, SS_CHECK_NICK);
 }
 
@@ -218,74 +235,78 @@
 	SeenData *sdo;
 	Client *u;
 	Channel *c;
-	int d, h, m, s, mf, sef;
+	char *seenhostmask;
+	int d, h, m, s, matchfound, seenentriesfound;
 	
-	if (!SeenServ.enable && cmdparams->channel == NULL && cmdparams->source->user->ulevel < NS_ULEVEL_LOCOPER) {
+	if (!SeenServ.enable && cmdparams->channel == NULL && cmdparams->source->user->ulevel < NS_ULEVEL_LOCOPER)
 		return NS_SUCCESS;
-	}
-	if (!SeenServ.enableseenchan && cmdparams->channel != NULL && cmdparams->source->user->ulevel < NS_ULEVEL_LOCOPER) {
+	if (!SeenServ.enableseenchan && cmdparams->channel != NULL && cmdparams->source->user->ulevel < NS_ULEVEL_LOCOPER)
 		return NS_SUCCESS;
-	}
-	if (ValidateNick(cmdparams->av[0]) == NS_SUCCESS) {
+	if (ValidateNick(cmdparams->av[0]) == NS_SUCCESS) 
+	{
 		u = FindUser(cmdparams->av[0]);
-		if (u) {
+		if (u) 
+		{
 			seen_report( cmdparams, "%s (%s@%s) is connected right now", u->name, u->user->username, u->user->vhost);
 			return NS_SUCCESS;
 		}
 	}
-	if (checktype == SS_CHECK_NICK) {
-		if (ValidateNick(cmdparams->av[0]) == NS_FAILURE) {
+	if (checktype == SS_CHECK_NICK) 
+	{
+		if (ValidateNick(cmdparams->av[0]) == NS_FAILURE) 
+		{
 			seen_report( cmdparams, "%s is not a valid nickname", cmdparams->av[0] );
 			return NS_SUCCESS;
 		}
 	}
 	for ( d = 0 ; d < 5 ; d++ ) {
-		senf[d][0] = '\0';
-		if (d < 4) {
-			ttxt[d][0] = '\0';
-		}
-	}
-	cc[0] = '\0';
-	h = m = s = sef = 0;
-	if (checktype == SS_CHECK_WILDCARD) {
-		if (! ( strchr( cmdparams->av[0], '*' ) == NULL ) ) {
+		seenentrynick[d][0] = '\0';
+		if (d < 4)
+			timetext[d][0] = '\0';
+	}
+	currentlyconnectedtext[0] = '\0';
+	h = m = s = seenentriesfound = 0;
+	if (checktype == SS_CHECK_WILDCARD) 
+	{
+		if ( strchr( cmdparams->av[0], '*' ) )
 			ircsnprintf(matchstr, USERHOSTLEN, "%s", cmdparams->av[0]);
-		} else {
+		else
 			ircsnprintf(matchstr, USERHOSTLEN, "*%s*", cmdparams->av[0]);
-		}
 	}
 	ln = list_last(seenlist);
-	while (ln != NULL && sef < 5) {
-		mf = 0;
+	while (ln != NULL && seenentriesfound < 5) 
+	{
+		matchfound = 0;
 		sd = lnode_get(ln);
-		if (checktype == SS_CHECK_NICK) {
-			if (!ircstrcasecmp(cmdparams->av[0], sd->nick)) {
-				mf = 1;
-			}
+		if (checktype == SS_CHECK_NICK) 
+		{
+			if (!ircstrcasecmp(cmdparams->av[0], sd->nick))
+				matchfound = 1;
 		} else if (checktype == SS_CHECK_WILDCARD) {
-			if ( ( match(matchstr, sd->userhost) && cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER ) || match(matchstr, sd->uservhost) ) {
-				mf = 1;
-			}
+			if ( ( match(matchstr, sd->userhost) && cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER ) || match(matchstr, sd->uservhost) )
+				matchfound = 1;
 		}
-		if (mf) {
-			if (!sef) {
-				sdo = ns_calloc( sizeof( SeenData ) );
-				os_memcpy( sdo, sd, sizeof( SeenData ) );
-				if (checktype == SS_CHECK_NICK) {
-					sef = 4;
-				} else {
-					strlcpy(senf[sef], sd->nick, MAXNICK+3);
-				}
+		if (matchfound) 
+		{
+			if (!seenentriesfound) 
+			{
+				sdo = sd;
+				if (checktype == SS_CHECK_NICK)
+					seenentriesfound = 4;
+				else
+					strlcpy(seenentrynick[seenentriesfound], sd->nick, MAXNICK+3);
 			} else {
-				ircsnprintf(senf[sef], MAXNICK+3, ", %s", sd->nick);
+				ircsnprintf(seenentrynick[seenentriesfound], MAXNICK+3, ", %s", sd->nick);
 			}
-			sef++;
+			seenentriesfound++;
 		}
 		ln = list_prev(seenlist, ln);
 	}
-	if (sef) {
+	if (seenentriesfound) 
+	{
 		d = (me.now - sdo->seentime);
-		if (d > 0) {
+		if (d > 0) 
+		{
 			s = (d % 60);
 			d -= s;
 			d = (d / 60);
@@ -296,90 +317,90 @@
 			d -= h;
 			d = (d / 24);
 			if (d)
-				ircsnprintf(ttxt[0], 12, "%d Days ", d);
+				ircsnprintf(timetext[0], 12, "%d Days ", d);
 			if (h)
-				ircsnprintf(ttxt[1], 12, "%d Hours ", h);
+				ircsnprintf(timetext[1], 12, "%d Hours ", h);
 			if (m)
-				ircsnprintf(ttxt[2], 12, "%d Minutes ", m);
+				ircsnprintf(timetext[2], 12, "%d Minutes ", m);
 			if (s)
-				ircsnprintf(ttxt[3], 12, "%d Seconds", s);
-			ircsnprintf(dt, SS_GENCHARLEN, "%s%s%s%s", ttxt[0], ttxt[1], ttxt[2], ttxt[3]);
+				ircsnprintf(timetext[3], 12, "%d Seconds", s);
+			ircsnprintf(combinedtimetext, SS_GENCHARLEN, "%s%s%s%s", timetext[0], timetext[1], timetext[2], timetext[3]);
 		} else {
-			ircsnprintf(dt, SS_GENCHARLEN, "0 Seconds");
-		}
-		nickstr[0] = '\0';
-		if (checktype == SS_CHECK_WILDCARD) {
-			ircsnprintf(nickstr, SS_MESSAGESIZE, "The %d most recent matches are - %s%s%s%s%s : ", sef, senf[0], senf[1], senf[2], senf[3], senf[4]);
+			ircsnprintf(combinedtimetext, SS_GENCHARLEN, "0 Seconds");
 		}
+		matchednickstr[0] = '\0';
+		if (checktype == SS_CHECK_WILDCARD && seenentriesfound > 1)
+			ircsnprintf(matchednickstr, SS_MESSAGESIZE, "The %d most recent matches are - %s%s%s%s%s : ", seenentriesfound, seenentrynick[0], seenentrynick[1], seenentrynick[2], seenentrynick[3], seenentrynick[4]);
 		switch( sdo->seentype )
 		{
 			case SS_CONNECTED:
 				u = FindUser(sdo->nick);
-				if (u) {
-					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask)) {
-						ircsnprintf(cc, SS_GENCHARLEN, ", %s is currently connected", u->name);
-					}
-				}
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen connecting %s ago%s", nickstr, sdo->userhost, dt, cc);
-				else
-					seen_report( cmdparams, "%s%s was last seen connecting %s ago%s", nickstr, sdo->nick, dt, cc );
+				if (u) 
+				{
+					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask))
+						ircsnprintf(currentlyconnectedtext, SS_GENCHARLEN, ", %s is currently connected", u->name);
+				}
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen connecting %s ago%s", matchednickstr, sdo->userhost, combinedtimetext, currentlyconnectedtext);
+				else
+					seen_report( cmdparams, "%s%s was last seen connecting %s ago%s", matchednickstr, sdo->nick, combinedtimetext, currentlyconnectedtext );
 				break;
 			case SS_QUIT:
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen quiting %s ago, stating %s", nickstr, sdo->userhost, dt, sdo->message);
-				else
-					seen_report( cmdparams, "%s%s was last seen quiting %s ago, stating %s", nickstr, sdo->uservhost, dt, sdo->message);
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen quiting %s ago, stating %s", matchednickstr, sdo->userhost, combinedtimetext, sdo->message);
+				else
+					seen_report( cmdparams, "%s%s was last seen quiting %s ago, stating %s", matchednickstr, sdo->uservhost, combinedtimetext, sdo->message);
 				break;
 			case SS_KILLED:
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen being killed %s ago %s", nickstr, sdo->userhost, dt, sdo->message);
-				else
-					seen_report( cmdparams, "%s%s was last seen being killed %s ago %s", nickstr, sdo->uservhost, dt, sdo->message );
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen being killed %s ago %s", matchednickstr, sdo->userhost, combinedtimetext, sdo->message);
+				else
+					seen_report( cmdparams, "%s%s was last seen being killed %s ago %s", matchednickstr, sdo->uservhost, combinedtimetext, sdo->message );
 				break;
 			case SS_NICKCHANGE:
 				u = FindUser(sdo->message);
-				if (u) {
-					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask)) {
-						ircsnprintf(cc, SS_GENCHARLEN, ", %s is currently connected", u->name);
-					}
+				if (u) 
+				{
+					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask))
+						ircsnprintf(currentlyconnectedtext, SS_GENCHARLEN, ", %s is currently connected", u->name);
 				}
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen changing Nickname %s ago to %s%s", nickstr, sdo->userhost, dt, sdo->message, cc);
-				else
-					seen_report( cmdparams, "%s%s was last seen changing Nickname %s ago to %s%s", nickstr, sdo->uservhost, dt, sdo->message, cc );
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen changing Nickname %s ago to %s%s", matchednickstr, sdo->userhost, combinedtimetext, sdo->message, currentlyconnectedtext);
+				else
+					seen_report( cmdparams, "%s%s was last seen changing Nickname %s ago to %s%s", matchednickstr, sdo->uservhost, combinedtimetext, sdo->message, currentlyconnectedtext );
 				break;
 			case SS_JOIN:
 				u = FindUser(sdo->nick);
-				if (u) {
-					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask)) {
+				if (u) 
+				{
+					if (!ircstrcasecmp(sdo->userhost, u->user->userhostmask)) 
+					{
 						c = FindChannel(sdo->message);
-						if (c) {
-							if (IsChannelMember(c, u) && !is_hidden_chan(c)) {
-								ircsnprintf(cc, SS_GENCHARLEN, ", %s is currently in %s", u->name, c->name);
-							}
+						if (c) 
+						{
+							if (IsChannelMember(c, u) && !is_hidden_chan(c))
+								ircsnprintf(currentlyconnectedtext, SS_GENCHARLEN, ", %s is currently in %s", u->name, c->name);
 						}
 					}
 				}
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen Joining %s %s ago%s", nickstr, sdo->userhost, sdo->message, dt, cc);
-				else
-					seen_report( cmdparams, "%s%s was last seen Joining %s %s ago%s", nickstr, sdo->uservhost, sdo->message, dt, cc );
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen Joining %s %s ago%s", matchednickstr, sdo->userhost, sdo->message, combinedtimetext, currentlyconnectedtext);
+				else
+					seen_report( cmdparams, "%s%s was last seen Joining %s %s ago%s", matchednickstr, sdo->uservhost, sdo->message, combinedtimetext, currentlyconnectedtext );
 				break;
 			case SS_PART:
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen Parting %s %s ago", nickstr, sdo->userhost, sdo->message, dt);
-				else
-					seen_report( cmdparams, "%s%s was last seen Parting %s %s ago", nickstr, sdo->uservhost, sdo->message, dt );
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen Parting %s %s ago", matchednickstr, sdo->userhost, sdo->message, combinedtimetext);
+				else
+					seen_report( cmdparams, "%s%s was last seen Parting %s %s ago", matchednickstr, sdo->uservhost, sdo->message, combinedtimetext );
 				break;
 			case SS_KICKED:
-				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
-					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen being Kicked From %s %s ago", nickstr, sdo->userhost, sdo->message, dt);
-				else
-					seen_report( cmdparams, "%s%s was last seen Kicked From %s %s", nickstr, sdo->uservhost, sdo->message, dt);
+				if (cmdparams->source->user->ulevel >= NS_ULEVEL_LOCOPER && cmdparams->channel == NULL)
+					irc_prefmsg (sns_bot, cmdparams->source, "%s%s was last seen being Kicked From %s %s ago", matchednickstr, sdo->userhost, sdo->message, combinedtimetext);
+				else
+					seen_report( cmdparams, "%s%s was last seen Kicked From %s %s", matchednickstr, sdo->uservhost, sdo->message, combinedtimetext);
 				break;
 		}
-		ns_free(sdo);
 	} else if (checktype == SS_CHECK_NICK) {
 		seen_report( cmdparams, "Sorry %s, I can't remember seeing anyone called %s", cmdparams->source->name, cmdparams->av[0] );
 	} else if (checktype == SS_CHECK_WILDCARD) {
@@ -391,19 +412,20 @@
 /*
  * Delete all matching entries
 */
-int sns_cmd_del(CmdParams *cmdparams) {
+int sns_cmd_del(CmdParams *cmdparams) 
+{
 	lnode_t *ln, *ln2;
 	SeenData *sd;
 	int i;
 	
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Delete Command used by %s (DEL %s)", cmdparams->source->name, cmdparams->av[0]);
-	}
+	SET_SEGV_LOCATION();
 	i = 0;
 	ln = list_first(seenlist);
-	while (ln != NULL) {
+	while (ln != NULL) 
+	{
 		sd = lnode_get(ln);
-		if (match(cmdparams->av[0], sd->userhost) || match(cmdparams->av[0], sd->uservhost)) {
+		if (match(cmdparams->av[0], sd->userhost) || match(cmdparams->av[0], sd->uservhost)) 
+		{
 			DBADelete( "seendata", sd->nick);
 			i++;
 			ns_free(sd);
@@ -416,9 +438,6 @@
 		}
 	}
 	seen_report( cmdparams, "%d matching entries deleted", i );
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "%d matching entries deleted", i);
-	}
 	return NS_SUCCESS;
 }
 
@@ -431,12 +450,11 @@
 	lnode_t *ln;
 	SeenData *sd;
 
-	if ( SeenServ.verbose == 1 ) {
-		irc_chanalert (sns_bot, "Stats Command used by %s (STATS)", cmdparams->source->name);
-	}
+	SET_SEGV_LOCATION();
 	os_memset( seenstats, 0, sizeof( seenstats ) );
 	ln = list_first(seenlist);
-	while (ln != NULL) {
+	while (ln) 
+	{
 		sd = lnode_get(ln);
 		seenstats[ sd->seentype ]++;
 		ln = list_next(seenlist, ln);

Modified: trunk/seenserv.c
==============================================================================
--- trunk/seenserv.c	(original)
+++ trunk/seenserv.c	Tue May 10 11:30:03 2005
@@ -45,16 +45,15 @@
 	{"SEEN",	sns_cmd_seenhost,	1,	0,			sns_help_seen,		sns_help_seen_oneline},
 	{"SEENNICK",	sns_cmd_seennick,	1,	0,			sns_help_seennick,	sns_help_seennick_oneline},
 	{"DEL",		sns_cmd_del,		1,	NS_ULEVEL_ADMIN,	sns_help_del,		sns_help_del_oneline},
-	{"STATS",	sns_cmd_status,		0,	NS_ULEVEL_LOCOPER,	sns_help_status,		sns_help_status_oneline},
+	{"STATUS",	sns_cmd_status,		0,	NS_ULEVEL_LOCOPER,	sns_help_status,	sns_help_status_oneline},
 	{NULL,		NULL,			0, 	0,			NULL,			NULL}
 };
 
 static bot_setting sns_settings[]=
 {
-	{"VERBOSE",		&SeenServ.verbose,		SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_verbose,		NULL,			(void *)0 },
 	{"EXCLUSIONS",		&SeenServ.exclusions,		SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_exclusions,	sns_set_exclusions,	(void *)1 },
 	{"ENABLE",		&SeenServ.enable,		SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_enable,		NULL,			(void *)0 },
-	{"ENABLESEENCHAN",	&SeenServ.enableseenchan,	SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_enableseenchan,	NULL,			(void *)0 },
+	{"ENABLESEENCHAN",	&SeenServ.enableseenchan,	SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_enableseenchan,	sns_set_enablechan,	(void *)0 },
 	{"SEENCHANNAME",	&SeenServ.seenchan,		SET_TYPE_CHANNEL,	0,	MAXCHANLEN,	NS_ULEVEL_ADMIN,	NULL,	sns_help_set_seenchan,		sns_set_seenchan,	(void *)"#Seen" },
 	{"MAXENTRIES",		&SeenServ.maxentries,		SET_TYPE_INT,		100,	100000,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_maxentries,	sns_set_maxentries,	(void *)2000 },
 	{"EVENTSIGNON",		&SeenServ.eventsignon,		SET_TYPE_BOOLEAN,	0,	0,		NS_ULEVEL_ADMIN,	NULL,	sns_help_set_eventsignon,	sns_set_eventsignon,	(void *)1 },
@@ -93,8 +92,8 @@
 	{EVENT_QUIT,		SeenQuit,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_KILL,		SeenKill,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_LOCALKILL,	SeenKill,		EVENT_FLAG_EXCLUDE_ME},
-	{EVENT_GLOBALKILL,	SeenKill,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_SERVERKILL,	SeenKill,		EVENT_FLAG_EXCLUDE_ME},
+	{EVENT_GLOBALKILL,	SeenKill,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_NICK,		SeenNickChange,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_JOIN,		SeenJoinChan,		EVENT_FLAG_EXCLUDE_ME},
 	{EVENT_PART,		SeenPartChan,		EVENT_FLAG_EXCLUDE_ME},
@@ -122,9 +121,8 @@
 {
 	/* Introduce a bot onto the network */
 	sns_bot = AddBot (&sns_botinfo);	
-	if (!sns_bot) {
+	if (!sns_bot)
 		return NS_FAILURE;
-	}
 	if (SeenServ.enableseenchan) {
 		irc_join (sns_bot, SeenServ.seenchan, "+o");
 		irc_chanalert (sns_bot, "Seen Channel Now Available in %s", SeenServ.seenchan);
@@ -154,20 +152,45 @@
 }
 
 /*
- * Seen Channel Setting
+ * Seen Channel Enable/Disable
 */
-static int sns_set_seenchan (CmdParams *cmdparams, SET_REASON reason) {
-	if (!SeenServ.enableseenchan) {
+static int sns_set_enablechan (CmdParams *cmdparams, SET_REASON reason) 
+{
+	if (!SeenServ.seenchan)
 		return NS_SUCCESS;
+	if (reason == SET_CHANGE) 
+	{
+		if (SeenServ.enableseenchan) 
+		{
+			irc_join (sns_bot, SeenServ.seenchan, "+o");
+			irc_chanalert (sns_bot, "Seen functions now available in %s", SeenServ.seenchan);
+			return NS_SUCCESS;
+		} else {
+			irc_part (sns_bot, SeenServ.seenchan, NULL);
+			irc_chanalert (sns_bot, "Seen functions are no longer available in %s", SeenServ.seenchan);
+			return NS_SUCCESS;
+		}
 	}
-	if (reason == SET_VALIDATE) {
+	return NS_SUCCESS;
+}
+
+/*
+ * Seen Channel Setting
+*/
+static int sns_set_seenchan (CmdParams *cmdparams, SET_REASON reason) 
+{
+	if (!SeenServ.enableseenchan)
+		return NS_SUCCESS;
+	if (reason == SET_VALIDATE) 
+	{
 		irc_prefmsg (sns_bot, cmdparams->source, "Seen Channel changing from %s to %s", SeenServ.seenchan, cmdparams->av[1]);
 		irc_chanalert (sns_bot, "Seen Channel Changing to %s , Parting %s (%s)", cmdparams->av[1], SeenServ.seenchan, cmdparams->source->name);
 		irc_chanprivmsg (sns_bot, SeenServ.seenchan, "\0039%s has changed Channels, Seen functions will now be available in %s", cmdparams->source->name, cmdparams->av[1]);
 		irc_part (sns_bot, SeenServ.seenchan, NULL);
 		return NS_SUCCESS;
 	}
-	if (reason == SET_CHANGE) {
+	if (reason == SET_CHANGE) 
+	{
 		irc_join (sns_bot, SeenServ.seenchan, "+o");
 		irc_chanalert (sns_bot, "Seen functions now available in %s", SeenServ.seenchan);
 		return NS_SUCCESS;
@@ -178,8 +201,10 @@
 /*
  * Change Max Entries Saved
 */
-static int sns_set_maxentries (CmdParams *cmdparams, SET_REASON reason) {
-	if (reason == SET_CHANGE) {
+static int sns_set_maxentries (CmdParams *cmdparams, SET_REASON reason) 
+{
+	if (reason == SET_CHANGE) 
+	{
 		checkseenlistlimit();
 		return NS_SUCCESS;
 	}
@@ -192,9 +217,7 @@
 static int sns_set_exclusions( CmdParams *cmdparams, SET_REASON reason )
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
-	{
 		SetAllEventFlags( EVENT_FLAG_USE_EXCLUDE, SeenServ.exclusions );
-	}
 	return NS_SUCCESS;
 }
 
@@ -205,13 +228,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventsignon) {
+		if (SeenServ.eventsignon)
 			EnableEvent(EVENT_SIGNON);
-			EnableEvent(EVENT_NICKIP);
-		} else {
+		else
 			DisableEvent(EVENT_SIGNON);
-			DisableEvent(EVENT_NICKIP);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -220,11 +240,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventquit) {
+		if (SeenServ.eventquit)
 			EnableEvent(EVENT_QUIT);
-		} else {
+		else
 			DisableEvent(EVENT_QUIT);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -233,7 +252,8 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventkill) {
+		if (SeenServ.eventkill) 
+		{
 			EnableEvent(EVENT_KILL);
 			EnableEvent(EVENT_LOCALKILL);
 			EnableEvent(EVENT_GLOBALKILL);
@@ -252,11 +272,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventnick) {
+		if (SeenServ.eventnick)
 			EnableEvent(EVENT_NICK);
-		} else {
+		else
 			DisableEvent(EVENT_NICK);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -265,11 +284,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventjoin) {
+		if (SeenServ.eventjoin)
 			EnableEvent(EVENT_JOIN);
-		} else {
+		else
 			DisableEvent(EVENT_JOIN);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -278,11 +296,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventpart) {
+		if (SeenServ.eventpart)
 			EnableEvent(EVENT_PART);
-		} else {
+		else
 			DisableEvent(EVENT_PART);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -291,11 +308,10 @@
 {
 	if( reason == SET_LOAD || reason == SET_CHANGE )
 	{
-		if (SeenServ.eventkick) {
+		if (SeenServ.eventkick)
 			EnableEvent(EVENT_KICK);
-		} else {
+		else
 			DisableEvent(EVENT_KICK);
-		}
 	}
 	return NS_SUCCESS;
 }
@@ -303,11 +319,12 @@
 /*
  * Check Entry Saved Time
 */
-static int sns_set_expiretime (CmdParams *cmdparams, SET_REASON reason) {
-	if (reason == SET_CHANGE && SeenServ.expiretime > 0) {
+static int sns_set_expiretime (CmdParams *cmdparams, SET_REASON reason) 
+{
+	if (reason == SET_CHANGE && SeenServ.expiretime > 0) 
+	{
 		checkseenlistlimit();
 		return NS_SUCCESS;
 	}
 	return NS_SUCCESS;
 }
-

Modified: trunk/seenserv.h
==============================================================================
--- trunk/seenserv.h	(original)
+++ trunk/seenserv.h	Tue May 10 11:30:03 2005
@@ -30,24 +30,23 @@
 
 typedef enum SEEN_TYPE
 {
-	SS_CONNECTED,	/* Seen Connection Type */
+	SS_CONNECTED,		/* Seen Connection Type */
 	SS_QUIT,		/* Seen Quit Type */
 	SS_KILLED,		/* Seen Killed Type */
-	SS_NICKCHANGE,	/* Seen Nick Change Type */
+	SS_NICKCHANGE,		/* Seen Nick Change Type */
 	SS_JOIN,		/* Seen Join Channel Type */
 	SS_PART,		/* Seen Part Channel Type */
 	SS_KICKED,		/* Seen Kicked Channel Type */
 	SEEN_TYPE_MAX,
 } SEEN_TYPE;
 
-#define SS_MESSAGESIZE		300 /* Message Field Size */
-#define SS_GENCHARLEN		128 /* General Character Field Length */
+#define SS_MESSAGESIZE	300	/* Message Field Size */
+#define SS_GENCHARLEN	128	/* General Character Field Length */
 
 /* Variables And Structs */
 Bot *sns_bot;
 
 struct SeenServ {
-	int verbose;
 	int exclusions;
 	int enable;
 	int enableseenchan;
@@ -78,7 +77,6 @@
 extern const char *sns_help_set_enableseenchan[];
 extern const char *sns_help_set_seenchan[];
 extern const char *sns_help_set_maxentries[];
-extern const char *sns_help_set_verbose[];
 extern const char *sns_help_set_eventsignon[];
 extern const char *sns_help_set_eventquit[];
 extern const char *sns_help_set_eventkill[];
@@ -106,6 +104,7 @@
 int SeenKicked (CmdParams *cmdparams);
 
 /* seenserv.c */
+static int sns_set_enablechan (CmdParams *cmdparams, SET_REASON reason);
 static int sns_set_seenchan (CmdParams *cmdparams, SET_REASON reason);
 static int sns_set_maxentries (CmdParams *cmdparams, SET_REASON reason);
 static int sns_set_exclusions (CmdParams *cmdparams, SET_REASON reason);

Modified: trunk/seenserv_help.c
==============================================================================
--- trunk/seenserv_help.c	(original)
+++ trunk/seenserv_help.c	Tue May 10 11:30:03 2005
@@ -58,12 +58,6 @@
 	NULL
 };
 
-const char *sns_help_set_verbose[] = {
-	"\2VERBOSE <ON|OFF>\2",
-	"Enable verbose mode.",
-	NULL
-};
-
 const char *sns_help_set_eventsignon[] = {
 	"\2EVENTSIGNON <ON|OFF>\2",
 	"Enable Connection Event Recording.",
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.