Преглед изворни кода

* Replay server cache on restart

Bryan Drewery пре 17 година
родитељ
комит
114395f26f
3 измењених фајлова са 15 додато и 1 уклоњено
  1. 3 1
      src/misc.c
  2. 11 0
      src/mod/server.mod/server.c
  3. 1 0
      src/mod/server.mod/server.h

+ 3 - 1
src/misc.c

@@ -650,6 +650,8 @@ readsocks(const char *fname)
       ip4 = strdup(bufp);
     else if (!strcmp(type, STR("+ip6")))
       ip6 = strdup(bufp);
+    else if (!strcmp(type, STR("+serv_cache")))
+      dprintf(DP_CACHE, bufp);
 
     if (enc)
       free(buf_ptr);
@@ -679,7 +681,7 @@ readsocks(const char *fname)
       add_server(nserv);
       curserv = 0;
       rehash_server(dcc[servidx].host, nick);
-      dprintf(DP_DUMP, "VERSION\n");
+      replay_cache(servidx);
       reset_chans = 1;
     }
   }

+ 11 - 0
src/mod/server.mod/server.c

@@ -371,6 +371,17 @@ char *splitnicks(char **rest)
   return r;
 }
 
+void replay_cache(int idx) {
+  struct msgq *r = NULL, *q = NULL;
+
+  for (r = cacheq.head; r; r = q) {
+    q = r->next;
+    server_activity(idx, r->msg, r->len);
+    free(r->msg);
+    free(r);
+  }
+}
+
 static bool fast_deq(int which)
 {
   if (!use_fastdeq)

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

@@ -72,6 +72,7 @@ void clearq(struct server_list *);
 void nuke_server(const char *);
 bool match_my_nick(char *);
 void rehash_server(const char *, const char *);
+void replay_cache(int);
 void join_chans();
 void check_hostmask();
 void next_server(int *, char *, port_t *, char *);