]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/packet.c
flood_recalc moved on ratbox3 event engine
[irc/rqf/shadowircd.git] / src / packet.c
index 6d203a1b8689d6e508e3e69efe5593fe1313ba87..f1d87cdc435675d20c621695258ff61fc0c8eea6 100644 (file)
@@ -165,43 +165,63 @@ flood_endgrace(struct Client *client_p)
        client_p->localClient->sent_parsed = 0;
 }
 
-/*
- * flood_recalc
- *
- * recalculate the number of allowed flood lines. this should be called
- * once a second on any given client. We then attempt to flush some data.
- */
-void
-flood_recalc(int fd, void *data)
-{
-       struct Client *client_p = data;
-       struct LocalUser *lclient_p = client_p->localClient;
-
-       /* This can happen in the event that the client detached. */
-       if(!lclient_p)
-               return;
-
-       /* allow a bursting client their allocation per second, allow
-        * a client whos flooding an extra 2 per second
-        */
-       if(IsFloodDone(client_p))
-               lclient_p->sent_parsed -= 2;
-       else
-               lclient_p->sent_parsed = 0;
-
-       if(lclient_p->sent_parsed < 0)
-               lclient_p->sent_parsed = 0;
-
-       if(--lclient_p->actually_read < 0)
-               lclient_p->actually_read = 0;
-
-       parse_client_queued(client_p);
-
-       if(IsAnyDead(client_p))
-               return;
-
-       /* and finally, reset the flood check */
-       rb_setflush(fd, 1000, flood_recalc, client_p);
+/*\r
+ * flood_recalc\r
+ *\r
+ * recalculate the number of allowed flood lines. this should be called\r
+ * once a second on any given client. We then attempt to flush some data.\r
+ */\r
+void\r
+flood_recalc(void *unused)\r
+{\r
+       rb_dlink_node *ptr, *next;\r
+       struct Client *client_p;\r
+\r
+       RB_DLINK_FOREACH_SAFE(ptr, next, lclient_list.head)\r
+       {\r
+               client_p = ptr->data;\r
+\r
+               if(unlikely(IsMe(client_p)))\r
+                       continue;\r
+                       \r
+               if(unlikely(client_p->localClient == NULL))\r
+                       continue;\r
+               \r
+               if(IsFloodDone(client_p))\r
+                       client_p->localClient->sent_parsed -= 2;\r
+               else\r
+                       client_p->localClient->sent_parsed = 0;\r
+                       \r
+               if(client_p->localClient->sent_parsed < 0)\r
+                       client_p->localClient->sent_parsed = 0;\r
+\r
+               if(--client_p->localClient->actually_read < 0)\r
+                       client_p->localClient->actually_read = 0;\r
+\r
+               parse_client_queued(client_p);\r
+               \r
+               if(unlikely(IsAnyDead(client_p)))\r
+                       continue;\r
+\r
+       }\r
+\r
+       RB_DLINK_FOREACH_SAFE(ptr, next, unknown_list.head)\r
+       {\r
+               client_p = ptr->data;\r
+\r
+               if(client_p->localClient == NULL)\r
+                       continue;\r
+\r
+               client_p->localClient->sent_parsed--;\r
+\r
+               if(client_p->localClient->sent_parsed < 0)\r
+                       client_p->localClient->sent_parsed = 0;\r
+\r
+               if(--client_p->localClient->actually_read < 0)\r
+                       client_p->localClient->actually_read = 0;\r
+\r
+               parse_client_queued(client_p);\r
+       }\r
 }
 
 /*