ソースを参照

* Prevent double logging on QUIT/NICK+MONITOR, and DUMP the NICK change.

Bryan Drewery 16 年 前
コミット
e4f82bea01
4 ファイル変更25 行追加13 行削除
  1. 2 1
      src/mod/server.mod/server.c
  2. 2 2
      src/mod/server.mod/server.h
  3. 19 9
      src/mod/server.mod/servmsg.c
  4. 2 1
      src/set.c

+ 2 - 1
src/mod/server.mod/server.c

@@ -74,7 +74,8 @@ bool keepnick = 1;		/* keep trying to regain my intended
 				   nickname? */
 static bool nick_juped = 0;	/* True if origbotname is juped(RPL437) (dw) */
 static bool jnick_juped = 0;    /* True if jupenick is juped */
-bool tried_jupenick = 0;
+time_t tried_jupenick = 0;
+time_t tried_nick = 0;
 bool use_monitor = 0;
 static bool waiting_for_awake;	/* set when i unidle myself, cleared when I get the response */
 time_t server_online;	/* server connection time */

+ 2 - 2
src/mod/server.mod/server.h

@@ -46,11 +46,11 @@ enum {
 
 extern bind_table_t	*BT_ctcp, *BT_ctcr, *BT_msgc;
 extern size_t		nick_len;
-extern bool		trigger_on_ignore, floodless, tried_jupenick, keepnick;
+extern bool		trigger_on_ignore, floodless, keepnick;
 extern int 		servidx, ctcp_mode, answer_ctcp, serv, curserv, default_alines;
 extern unsigned int     rolls;
 extern port_t		default_port, newserverport, curservport;
-extern time_t		server_online;
+extern time_t		server_online, tried_jupenick, tried_nick;
 extern interval_t	cycle_time;
 extern char		cursrvname[], botrealname[121], botuserhost[], ctcp_reply[1024],
 			newserver[], newserverpass[], curnetwork[], botuserip[], altnick_char;

+ 19 - 9
src/mod/server.mod/servmsg.c

@@ -853,16 +853,22 @@ static int nick_which(const char* nick, bool& is_jupe, bool& is_orig) {
 
 static void nick_available(bool is_jupe, bool is_orig) {
   if (jupenick[0] && is_jupe && !match_my_nick((jupenick))) {
-    tried_jupenick = 1;
-    dprintf(DP_SERVER, "NICK %s\n", jupenick);
-    if (!jnick_juped)
-      putlog(LOG_MISC, "*", "Switching back to jupenick '%s'", jupenick);
+    /* Ensure we aren't processing a QUIT/NICK and a MONITOR, or just some screw up */
+    if (!tried_jupenick || ((now - tried_jupenick) > 1)) {
+      tried_jupenick = now;
+      dprintf(DP_DUMP, "NICK %s\n", jupenick);
+      if (!jnick_juped)
+        putlog(LOG_MISC, "*", "Switching back to jupenick '%s'", jupenick);
+    }
     // Don't switch to the nick if already on jupenick
   } else if (is_orig && !match_my_nick(origbotname) && (!jupenick[0] || !match_my_nick(jupenick))) {
-    altnick_char = rolls = 0;
-    dprintf(DP_SERVER, "NICK %s\n", origbotname);
-    if (!nick_juped)
-      putlog(LOG_MISC, "*", "Switching back to nick '%s'", origbotname);
+    if (!tried_nick || ((now - tried_nick) > 1)) {
+      altnick_char = rolls = 0;
+      tried_nick = now;
+      dprintf(DP_DUMP, "NICK %s\n", origbotname);
+      if (!nick_juped)
+        putlog(LOG_MISC, "*", "Switching back to nick '%s'", origbotname);
+    }
   }
 }
 
@@ -967,7 +973,9 @@ static int got433(char *from, char *msg)
     else if (!rfc_casecmp(tmp, origbotname))
       nick_juped = 0;
 
-    sdprintf("433: botname: %s tmp: %s rolls: %d altnick_char: %c tried_jupenick: %d", botname, tmp, rolls, altnick_char, tried_jupenick);
+    tried_nick = 0;
+
+    sdprintf("433: botname: %s tmp: %s rolls: %d altnick_char: %c tried_jupenick: %lu", botname, tmp, rolls, altnick_char, tried_jupenick);
     // Tried jupenick, but already on origbotname (or a rolled nick), stay on it.
     if (tried_jupenick && (match_my_nick(origbotname) || rolls || altnick_char != 0)) {
       putlog(LOG_MISC, "*", "%sNICK IN USE: '%s' (keeping '%s').", tried_jupenick ? "JUPE" : "", tmp, botname);
@@ -1097,6 +1105,7 @@ static int gotnick(char *from, char *msg)
     strlcpy(botname, msg, NICKLEN);
 
     tried_jupenick = 0;
+    tried_nick = 0;
 
     if (jupenick[0] && !rfc_casecmp(msg, jupenick)) {
       altnick_char = rolls = 0;
@@ -1708,6 +1717,7 @@ static void connect_server(void)
     nick_juped = 0;
     jnick_juped = 0;
     tried_jupenick = 0;
+    tried_nick = 0;
     rolls = 0;
     altnick_char = 0;
     use_monitor = 0;

+ 2 - 1
src/set.c

@@ -297,7 +297,7 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
           if (data && (!olddata || (olddata && strcmp(olddata, jupenick)))) {
             // If not on the new nick, jump to it
             if (!match_my_nick(jupenick)) {
-              tried_jupenick = 1;
+              tried_jupenick = now;
               dprintf(DP_SERVER, "NICK %s\n", jupenick);
               should_reset_monitor = 1;
             }
@@ -306,6 +306,7 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
             // Unset jupenick, try for 'nick' now if we were on jupenick
             if (match_my_nick(olddata)) {
               altnick_char = rolls = 0;
+              tried_nick = now;
               dprintf(DP_SERVER, "NICK %s\n", origbotname);
               should_reset_monitor = 1;
             }