Explorar el Código

* Bot will now jump from the server it's on if it is removed from the server list. (fixes a changing network bug)

Bryan Drewery hace 16 años
padre
commit
cdff9e082e
Se han modificado 3 ficheros con 22 adiciones y 3 borrados
  1. 2 0
      doc/UPDATES
  2. 1 1
      src/mod/server.mod/server.c
  3. 19 2
      src/set.c

+ 2 - 0
doc/UPDATES

@@ -1,3 +1,5 @@
+* Bot will now jump from the server it's on if it is removed from the server list. (fixes a changing network bug)
+
 1.3 - http://wraith.botpack.net/milestone/1.3
 * Binary / shell / startup changes
   * Binary error messages are no longer obscure numbers or fake segfaults. (Compile with OBSCURE_ERRORS to re-enable)

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

@@ -808,7 +808,7 @@ void next_server(int *ptr, char *servname, port_t *port, char *pass)
   /* -1  -->  Go to specified server */
   if (*ptr == (-1)) {
     for (; x; x = x->next) {
-      if (x->port == *port) {
+      if ((x->port && x->port == *port) || (!x->port && default_port == *port)) {
 	if (!strcasecmp(x->name, servname)) {
 	  *ptr = i;
 	  return;

+ 19 - 2
src/set.c

@@ -392,8 +392,25 @@ sdprintf("var (mem): %s -> %s", var->name, datain ? datain : "(NULL)");
       add_server(data);
     
     if (server_online) {
-      curserv = -1;
-      next_server(&curserv, cursrvname, &curservport, NULL);
+      bool found_server = 0;
+
+      for (struct server_list *n = (*(struct server_list **)var->mem); n; n = n->next) {
+        if (((n->port && n->port == curservport) || (!n->port && default_port == curservport)) &&
+            !strcmp(n->name, cursrvname)) {
+          found_server = 1;
+          break;
+        }
+      }
+
+      if (!found_server) {
+        // Current server not found in new list, jump!
+        nuke_server("server removed");
+        cycle_time = 0;
+      } else {
+        // Update current server in list.
+        curserv = -1;
+        next_server(&curserv, cursrvname, &curservport, NULL);
+      }
     }
   }