home bbs files messages ]

Just a sample of the Echomail archive

Cooperative anarchy at its finest, still active today. Darkrealms is the Zone 1 Hub.

   SYNC_PROGRAMMING      Synchronet/Baja/XSDK Programming      49,116 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 48,934 of 49,116   
   Rob Swindell (on Windows 11) to Git commit to main/sbbs/master   
   src/sbbs3/ratelimit.hppsrc/sbbs3/sbbs_in   
   05 Feb 26 20:57:22   
   
   TZUTC: -0800   
   MSGID: 54372.syncprog@1:103/705 2deb7f16   
   PID: Synchronet 3.21b-Linux master/5c73d262c Jan 21 2026 GCC 12.2.0   
   TID: SBBSecho 3.36-Linux master/cad77a5d2 Feb 05 2026 GCC 12.2.0   
   BBSID: VERT   
   CHRS: ASCII 1   
   FORMAT: flowed   
   https://gitlab.synchro.net/main/sbbs/-/commit/bd375c1e4077420ff7f9148e   
   Added Files:   
   	src/sbbs3/ratelimit.hpp   
   Modified Files:   
   	src/sbbs3/sbbs_ini.c websrvr.cpp websrvr.h   
   Log Message:   
   Add a basic and optional rate limiter, initially just for HTTP[S] requests   
      
   This is experimental - I'm a little uneasy about the threadsafety and may need   
   to add some mutex protection, but testing will help to know.   
      
   I'm also a little uneasy about the memory usage. My original idea was to use   
   an array or vector with a element for every second in the rate limit period,   
   each element would be an unordered_map with the IP address as the key and the   
   count (of requests) in that second as the value. This would limit the memory   
   usage to period * IPs. The process of trimming or wrapping array to   
   automatically "throw out" seconds beyond the rate limit period wasn't clear   
   to me yet.   
      
   However, as I started to type the implementation, Co-pilot recommended this   
   approach which simplier: it uses an unordered_map with the IP for the key, but   
   the value is an array of times of each request from each client. So the   
   memory requirements are IPs * max_requests_per_period * period. It's still   
   bounded, but a larger possible total amount of memory required. The cleanup   
   operation is now clear though and Co-pilot implemented that for me as well.   
      
   Enable this feature by setting in the following keys in the [Web] section of   
   ctrl/sbbs.ini:   
    - MaxRequestPerPeriod   
    - RequestRateLimitPeriod   
      
   e.g. setting MaxRequestPerPeriod to 1000 and RequestRateLimitPeriod to 600   
   would set the maximum request rate to 1000 requests per 10 minutes.   
      
   If this works well, we can use this same rate limiter for other actions   
   (e.g. connections) and servers and could have separate rate limits for   
   authenticated versus unauthenticated users, apply whitelists, etc.   
   --- SBBSecho 3.36-Linux   
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)   
   SEEN-BY: 103/705 105/81 106/201 124/5016 128/187 129/14 153/757 7715   
   SEEN-BY: 154/10 30 110 203/0 218/700 221/0 226/30 227/114 229/110   
   SEEN-BY: 229/134 206 317 400 426 428 470 700 705 240/1120 5832 263/1   
   SEEN-BY: 266/512 280/464 5003 5006 291/111 292/8125 301/1 320/219   
   SEEN-BY: 322/757 341/66 234 342/200 396/45 423/120 460/58 256 1124   
   SEEN-BY: 633/280 712/848 770/1 902/26 5020/400 8912 5054/30 5075/35   
   PATH: 103/705 280/464 460/58 229/426   
      

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca