]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/reject.c
Allow /ojoin !#channel/%#channel, if admin/halfop are enabled.
[irc/rqf/shadowircd.git] / src / reject.c
index 6e226ca5b37be6759bb73f984d45e7bc6f05adfa..3453c7da65bac68dd4f92dcd95d014f4cebb4a23 100644 (file)
@@ -211,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)
 {
@@ -312,6 +337,43 @@ 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;
+}
+
+void 
+flush_throttle(void)
+{
+       rb_dlink_node *ptr, *next;
+       rb_patricia_node_t *pnode;
+       throttle_t *t;
+       
+       RB_DLINK_FOREACH_SAFE(ptr, next, throttle_list.head)
+       {
+               pnode = ptr->data;
+               t = pnode->data;                
+
+               rb_dlinkDelete(ptr, &throttle_list);
+               rb_free(t);
+               rb_patricia_remove(throttle_tree, pnode);
+       }
+}
+
 static void
 throttle_expires(void *unused)
 {