Explorar o código

* Rehash MONITOR List on server when jupenick/nick change, and on connect.

Bryan Drewery %!s(int64=16) %!d(string=hai) anos
pai
achega
9086f749d6
Modificáronse 3 ficheiros con 25 adicións e 1 borrados
  1. 1 0
      src/mod/server.mod/server.h
  2. 17 1
      src/mod/server.mod/servmsg.c
  3. 7 0
      src/set.c

+ 1 - 0
src/mod/server.mod/server.h

@@ -74,6 +74,7 @@ void clearq(struct server_list *);
 void nuke_server(const char *);
 bool match_my_nick(char *);
 void rehash_server(const char *, const char *);
+void rehash_monitor_list();
 void replay_cache(int, bd::Stream*);
 void join_chans();
 void check_hostmask();

+ 17 - 1
src/mod/server.mod/servmsg.c

@@ -174,6 +174,15 @@ bool match_my_nick(char *nick)
   return (!rfc_casecmp(nick, botname));
 }
 
+void rehash_monitor_list() {
+  if (!use_monitor) return;
+  dprintf(DP_SERVER, "MONITOR C\n");
+  if (jupenick[0])
+    dprintf(DP_SERVER, "MONITOR + %s,%s\n", jupenick, origbotname);
+  else
+    dprintf(DP_SERVER, "MONITOR + %s", origbotname);
+}
+
 void rehash_server(const char *servname, const char *nick)
 {
   server_online = now;
@@ -188,6 +197,7 @@ void rehash_server(const char *servname, const char *nick)
     dprintf(DP_SERVER, "WHOIS %s\n", botname); /* get user@host */
     dprintf(DP_SERVER, "USERHOST %s\n", botname); /* get user@ip */
     dprintf(DP_SERVER, "MODE %s %s\n", botname, var_get_str_by_name("usermode"));
+    rehash_monitor_list();
   }
 }
 
@@ -288,8 +298,14 @@ got005(char *from, char *msg)
         modesperline = MODES_PER_LINE_MAX;
     } else if (!strcasecmp(tmp, "NICKLEN"))
       nick_len = atoi(p);
-    else if (!strcasecmp(tmp, "MONITOR"))
+    else if (!strcasecmp(tmp, "MONITOR")) {
+      bool need_to_rehash_monitor = 0;
+      if (!use_monitor && !replaying_cache) // Don't rehash if restarting. No need.
+        need_to_rehash_monitor = 1;
       use_monitor = 1;
+      if (need_to_rehash_monitor)
+        rehash_monitor_list();
+    }
     else if (!strcasecmp(tmp, "NETWORK"))
       strlcpy(curnetwork, p, 120);
     else if (!strcasecmp(tmp, "PENALTY"))

+ 7 - 0
src/set.c

@@ -280,6 +280,8 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
       ((char *) var->mem)[0] = 0;
 
     if (!conf.bot->hub) {
+      bool should_reset_monitor = 0;
+
       if (var->flags & VAR_JUPENICK) {
         //Don't allow setting to the same as origbotname
         if (data && !rfc_casecmp(jupenick, origbotname)) {
@@ -297,6 +299,7 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
             if (!match_my_nick(jupenick)) {
               tried_jupenick = 1;
               dprintf(DP_SERVER, "NICK %s\n", jupenick);
+              should_reset_monitor = 1;
             }
           // Unset and there was an old value
           } else if (!data && olddata) { 
@@ -304,6 +307,7 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
             if (match_my_nick(olddata)) {
               altnick_char = rolls = 0;
               dprintf(DP_SERVER, "NICK %s\n", origbotname);
+              should_reset_monitor = 1;
             }
           }
         }
@@ -322,9 +326,12 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
             // Unset the rolls/altnick stuff as we're starting over from scratch.
             altnick_char = rolls = 0;
             dprintf(DP_SERVER, "NICK %s\n", (char *) var->mem);
+            should_reset_monitor = 1;
           }
         }
       }
+      if (server_online && should_reset_monitor)
+        rehash_monitor_list();
     }
     if (olddata)
       free(olddata);