Explorar el Código

Merge branch 'jupenick-misc'

* jupenick-misc:
  * Use DP_MODE_NEXT for grabbing nicks
  * When nick is juped due to netsplit, just send NICK every minute to combat the nick_delay timer
  * Don't set altnick_char = 0 when rehashing server, it's done on connect already
  * Fix rolls not being reset on server connect
  * Pass nick state (rolls/altnick_char) through restart
  * When the nick is juped due to netsplit, try grabbing it every 5 minutes to unset the jupe status if possible

Conflicts:
	src/mod/server.mod/server.c
Bryan Drewery hace 16 años
padre
commit
0916d12c19
Se han modificado 3 ficheros con 25 adiciones y 7 borrados
  1. 8 0
      src/misc.c
  2. 13 1
      src/mod/server.mod/server.c
  3. 4 6
      src/mod/server.mod/servmsg.c

+ 8 - 0
src/misc.c

@@ -671,6 +671,10 @@ readsocks(const char *fname)
       old_buildts = strtol(str.c_str(), NULL, 10);
     else if (type == STR("+botname"))
       nick = str.dup();
+    else if (type == STR("+rolls"))
+      rolls = atoi(str.c_str());
+    else if (type == STR("+altnick_char"))
+      altnick_char = str[0];
     else if (type == STR("+ip4"))
       ip4 = str.dup();
     else if (type == STR("+ip6"))
@@ -769,6 +773,10 @@ restart(int idx)
   if (server_online) {
     if (botname[0])
       stream << buf.printf(STR("+botname %s\n"), botname);
+    if (rolls)
+      stream << buf.printf(STR("+rolls %d\n"), rolls);
+    if (altnick_char)
+      stream << buf.printf(STR("+altnick_char %c\n"), altnick_char);
     stream << buf.printf(STR("+server_online %li\n"), server_online);
   }
   stream << buf.printf(STR("+online_since %li\n"), online_since);

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

@@ -1007,7 +1007,7 @@ static void server_secondly()
     connect_server();
 
   if (server_online) {
-    if (keepnick && (!use_monitor || (use_monitor && (jnick_juped == 2 || nick_juped == 2)))) {
+    if (keepnick && !use_monitor) {
       static int ison_cnt = 0;
 
       if (ison_time == 0) //If someone sets this to 0, all hell will break loose!
@@ -1069,6 +1069,17 @@ static void server_check_lag()
   }
 }
 
+static void server_minutely()
+{
+  if (server_online) {
+    // Ratbox sets a nick_delay (default:15min) timer when a nick splits off to prevent collisions,
+    // We must check periodically to see if the local server has unjuped our wanted nicks.
+    if (keepnick && (jnick_juped == 2 || nick_juped == 2)) {
+      nick_available(1, 1);
+    }
+  }
+}
+
 void server_die()
 {
   cycle_time = 100;
@@ -1173,5 +1184,6 @@ void server_init()
   timer_create_repeater(&howlong, "server_queue", (Function) deq_msg);
   timer_create_secs(1, "server_secondly", (Function) server_secondly);
   timer_create_secs(30, "server_check_lag", (Function) server_check_lag);
+  timer_create_secs(60, "server_minutely", (Function) server_minutely);
 //  timer_create_secs(60, "minutely_checks", (Function) minutely_checks);
 }

+ 4 - 6
src/mod/server.mod/servmsg.c

@@ -190,7 +190,6 @@ void rehash_monitor_list() {
 
 void rehash_server(const char *servname, const char *nick)
 {
-  altnick_char = 0;
   strlcpy(cursrvname, servname, sizeof(cursrvname));
   if (servidx >= 0)
     curservport = dcc[servidx].port;
@@ -916,7 +915,7 @@ static void nick_available(bool is_jupe, bool is_orig) {
     /* Ensure we aren't processing a QUIT/NICK and a MONITOR, or just some screw up */
     if (!tried_jupenick || ((now - tried_jupenick) > 2)) {
       tried_jupenick = now;
-      dprintf(DP_DUMP, "NICK %s\n", jupenick);
+      dprintf(DP_MODE_NEXT, "NICK %s\n", jupenick);
       if (!jnick_juped)
         putlog(LOG_MISC, "*", "Switching back to jupenick '%s'", jupenick);
     }
@@ -925,7 +924,7 @@ static void nick_available(bool is_jupe, bool is_orig) {
     if (!tried_nick || ((now - tried_nick) > 2)) {
       altnick_char = rolls = 0;
       tried_nick = now;
-      dprintf(DP_DUMP, "NICK %s\n", origbotname);
+      dprintf(DP_MODE_NEXT, "NICK %s\n", origbotname);
       if (!nick_juped)
         putlog(LOG_MISC, "*", "Switching back to nick '%s'", origbotname);
     }
@@ -1915,8 +1914,7 @@ static void connect_server(void)
     jnick_juped = 0;
     tried_jupenick = 0;
     tried_nick = 0;
-    rolls = 0;
-    altnick_char = 0;
+    altnick_char = rolls = 0;
     use_monitor = 0;
     include_lk = 1;
 
@@ -2014,7 +2012,7 @@ static void server_dns_callback(int id, void *client_data, const char *host, bd:
     else
       strlcpy(botname, origbotname, sizeof(botname));
     /* Start alternate nicks from the beginning */
-    altnick_char = 0;
+    altnick_char = rolls = 0;
     /* reset counter so first ctcp is dumped for tcms */
     first_ctcp_check = 0;