]> jfr.im git - solanum.git/blobdiff - src/packet.c
flood_recalc moved on ratbox3 event engine
[solanum.git] / src / packet.c
index bc1a0f5651956efa3407c02d70a6dfbd346557a9..f1d87cdc435675d20c621695258ff61fc0c8eea6 100644 (file)
@@ -58,7 +58,7 @@ parse_client_queued(struct Client *client_p)
                        if(client_p->localClient->sent_parsed >= client_p->localClient->allow_read)
                                break;
 
-                       dolen = linebuf_get(&client_p->localClient->
+                       dolen = rb_linebuf_get(&client_p->localClient->
                                            buf_recvq, readBuf, READBUF_SIZE,
                                            LINEBUF_COMPLETE, LINEBUF_PARSED);
 
@@ -88,7 +88,7 @@ parse_client_queued(struct Client *client_p)
 
        if(IsAnyServer(client_p) || IsExemptFlood(client_p))
        {
-               while (!IsAnyDead(client_p) && (dolen = linebuf_get(&client_p->localClient->buf_recvq,
+               while (!IsAnyDead(client_p) && (dolen = rb_linebuf_get(&client_p->localClient->buf_recvq,
                                           readBuf, READBUF_SIZE, LINEBUF_COMPLETE,
                                           LINEBUF_PARSED)) > 0)
                {
@@ -132,7 +132,7 @@ parse_client_queued(struct Client *client_p)
                        else if(client_p->localClient->sent_parsed >= (4 * client_p->localClient->allow_read))
                                break;
 
-                       dolen = linebuf_get(&client_p->localClient->
+                       dolen = rb_linebuf_get(&client_p->localClient->
                                            buf_recvq, readBuf, READBUF_SIZE,
                                            LINEBUF_COMPLETE, LINEBUF_PARSED);
 
@@ -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
 }
 
 /*
@@ -282,7 +302,7 @@ read_ctrl_packet(int fd, void *data)
                        reply->datalen |= *len;
                        reply->gotdatalen++;
                        if(reply->datalen > 0)
-                               reply->data = MyMalloc(reply->datalen);
+                               reply->data = rb_malloc(reply->datalen);
                }
 
                if(reply->gotdatalen < 2)
@@ -374,8 +394,8 @@ read_packet(int fd, void *data)
        call_hook(h_iorecv_id, &hdata);
 #endif
 
-       if(client_p->localClient->lasttime < CurrentTime)
-               client_p->localClient->lasttime = CurrentTime;
+       if(client_p->localClient->lasttime < rb_current_time())
+               client_p->localClient->lasttime = rb_current_time();
        client_p->flags &= ~FLAGS_PINGSENT;
 
        /*
@@ -386,7 +406,7 @@ read_packet(int fd, void *data)
        if(IsHandshake(client_p) || IsUnknown(client_p))
                binary = 1;
 
-       lbuf_len = linebuf_parse(&client_p->localClient->buf_recvq, readBuf, length, binary);
+       lbuf_len = rb_linebuf_parse(&client_p->localClient->buf_recvq, readBuf, length, binary);
 
        lclient_p->actually_read += lbuf_len;
 
@@ -401,7 +421,7 @@ read_packet(int fd, void *data)
                
        /* Check to make sure we're not flooding */
        if(!IsAnyServer(client_p) &&
-          (linebuf_alloclen(&client_p->localClient->buf_recvq) > ConfigFileEntry.client_flood))
+          (rb_linebuf_alloclen(&client_p->localClient->buf_recvq) > ConfigFileEntry.client_flood))
        {
                if(!(ConfigFileEntry.no_oper_flood && IsOper(client_p)))
                {