Jelajahi Sumber

* Port [3961] to 1.2.16 from trunk
* Make cmd_clearhosts more effecient on sharing/botlink


svn: 3962

Bryan Drewery 17 tahun lalu
induk
melakukan
563b1dae1b
5 mengubah file dengan 30 tambahan dan 16 penghapusan
  1. 10 2
      src/cmds.c
  2. 2 0
      src/mod/irc.mod/chan.c
  3. 18 0
      src/mod/share.mod/share.c
  4. 0 13
      src/userrec.c
  5. 0 1
      src/userrec.h

+ 10 - 2
src/cmds.c

@@ -62,6 +62,7 @@
 #include "src/mod/irc.mod/irc.h"
 #include "src/mod/update.mod/update.h"
 #include "src/mod/channels.mod/channels.h"
+#include "src/mod/share.mod/share.h"
 
 #include <ctype.h>
 #include <stdlib.h>
@@ -3716,10 +3717,17 @@ static void cmd_clearhosts(int idx, char *par)
     }
   }
 
-  if (clearhosts(u2))
+  if (get_user(&USERENTRY_HOSTS, u2)) {
+    shareout("ch %s\n", handle);
+    noshare = 1;
+    set_user(&USERENTRY_HOSTS, u2, (void *) "none");
+    noshare = 0;
     dprintf(idx, "Cleared hosts for %s.\n", handle);
-  else
+    if (!conf.bot->hub && server_online)
+      check_this_user(handle, 1, NULL);
+  } else
     dprintf(idx, "%s had no hosts set.\n", handle);
+
   if (conf.bot->hub)
     write_userfile(idx);
 }

+ 2 - 0
src/mod/irc.mod/chan.c

@@ -1060,6 +1060,8 @@ static void check_this_member(struct chanset_t *chan, char *nick, struct flag_re
   }
 }
 
+
+//del=1 -user, del=2 -host
 void check_this_user(char *hand, int del, char *host)
 {
   char s[UHOSTLEN] = "";

+ 18 - 0
src/mod/share.mod/share.c

@@ -660,6 +660,23 @@ share_change(int idx, char *par)
   }
 }
 
+static void
+share_clearhosts(int idx, char *par)
+{
+  if (dcc[idx].status & STAT_SHARE) {
+    char *hand = newsplit(&par);
+    struct userrec *u = get_user_by_handle(userlist, hand);
+    if (u) {
+      shareout_but(idx, "ch %s\n", u->handle);
+      if (!conf.bot->hub && server_online)
+        check_this_user(u->handle, 1, NULL);
+      noshare = 1;
+      set_user(&USERENTRY_HOSTS, u, (void *) "none");
+      noshare = 0;
+    }
+  }
+}
+
 static void
 share_chchinfo(int idx, char *par)
 {
@@ -1051,6 +1068,7 @@ static botcmd_t C_share[] = {
   {"-mc", share_mns_maskchan, 0},
   {"a", share_chattr, 0},
   {"c", share_change, 0},
+  {"ch", share_clearhosts, 0},
   {"chchinfo", share_chchinfo, 0},
   {"e", share_end, 0},
   {"h", share_chhand, 0},

+ 0 - 13
src/userrec.c

@@ -813,16 +813,3 @@ void user_del_chan(char *dname)
     }
   }
 }
-
-bool clearhosts(struct userrec *u) {
-  if (get_user(&USERENTRY_HOSTS, u)) {
-    while (struct list_type *q = (struct list_type *) get_user(&USERENTRY_HOSTS, u)) {
-      char *host = strdup(q->extra);
-      delhost_by_handle(u->handle, host);
-      check_this_user(u->handle, 1, host);
-      free(host);
-    }
-    return 1;
-  }
-  return 0;
-}

+ 0 - 1
src/userrec.h

@@ -16,7 +16,6 @@ int write_userfile(int);
 void touch_laston(struct userrec *, char *, time_t);
 void user_del_chan(char *);
 struct userrec *host_conflicts(char *);
-bool clearhosts(struct userrec *);
 
 extern struct userrec  		*userlist, *lastuser;
 extern int			cache_hit, cache_miss, userfile_perm;