]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/reject.c
Show rejectcache/throttle in /testline output.
[irc/rqf/shadowircd.git] / src / reject.c
index f6d4b3d200f0bebd7bcce7e677bf074fd0637095..c9c7d455be3c1385577d8b6e0af06f814613a506 100644 (file)
@@ -125,7 +125,21 @@ init_reject(void)
 unsigned long
 throttle_size(void)
 {
-       return rb_dlink_list_length(&throttle_list);
+       unsigned long count;
+       rb_dlink_node *ptr;
+       rb_patricia_node_t *pnode;
+       throttle_t *t;
+
+       count = 0;
+       RB_DLINK_FOREACH(ptr, throttle_list.head)
+       {
+               pnode = ptr->data;
+               t = pnode->data;
+               if (t->count > ConfigFileEntry.throttle_count)
+                       count++;
+       }
+
+       return count;
 }
 
 void
@@ -197,6 +211,31 @@ check_reject(rb_fde_t *F, struct sockaddr *addr)
        return 0;
 }
 
+int
+is_reject_ip(struct sockaddr *addr)
+{
+       rb_patricia_node_t *pnode;
+       reject_t *rdata;
+       int duration;
+
+       /* Reject is disabled */
+       if(ConfigFileEntry.reject_after_count == 0 || ConfigFileEntry.reject_duration == 0)
+               return 0;
+               
+       pnode = rb_match_ip(reject_tree, addr);
+       if(pnode != NULL)
+       {
+               rdata = pnode->data;
+
+               if(rdata->count > (unsigned long)ConfigFileEntry.reject_after_count)
+               {
+                       duration = rdata->time + ConfigFileEntry.reject_duration - rb_current_time();
+                       return duration > 0 ? duration : 1;
+               }
+       }       
+       return 0;
+}
+
 void 
 flush_reject(void)
 {
@@ -298,6 +337,25 @@ throttle_add(struct sockaddr *addr)
        return 0;
 }
 
+int
+is_throttle_ip(struct sockaddr *addr)
+{
+       throttle_t *t;
+       rb_patricia_node_t *pnode;
+       int duration;
+
+       if((pnode = rb_match_ip(throttle_tree, addr)) != NULL)
+       {
+               t = pnode->data;
+               if(t->count > ConfigFileEntry.throttle_count)
+               {
+                       duration = t->last + ConfigFileEntry.throttle_duration - rb_current_time();
+                       return duration > 0 ? duration : 1;
+               }
+       }
+       return 0;
+}
+
 static void
 throttle_expires(void *unused)
 {