Difference between revisions of "Protocols/OSCAR/Rate Limits"

From NINA Wiki
Jump to navigation Jump to search
(Created page with "{{Protocols/OSCAR}} To protect the server and other users from abusive clients, the server implements SNAC rate limiting. Rate limiting is done with a simple formula that cal...")
 
Line 14: Line 14:
  
 
Server responds [[Protocols/OSCAR/SNAC/OSERVICE__RATE_PARAMS_REPLY|OSERVICE__RATE_PARAMS_REPLY]]
 
Server responds [[Protocols/OSCAR/SNAC/OSERVICE__RATE_PARAMS_REPLY|OSERVICE__RATE_PARAMS_REPLY]]
 +
 +
Client can send [[Protocols/OSCAR/SNAC/OSERVICE__RATE_ADD_PARAM_SUB|OSERVICE__RATE_ADD_PARAM_SUB]] to subscribe to specific rate changes.
 +
 +
Client can send [[Protocols/OSCAR/SNAC/OSERVICE__RATE_DEL_PARAM_SUB|OSERVICE__RATE_DEL_PARAM_SUB]] to unsubscribe to specific rate changes.
 +
 +
Server sends [[Protocols/OSCAR/SNAC/OSERVICE__RATE_PARAM_CHANGE|OSERVICE__RATE_PARAM_CHANGE]] when changes occur to any subscribed rate classes.
 +
 +
  
 
[[Category:Stub]]
 
[[Category:Stub]]

Revision as of 05:05, 21 March 2020

OSCAR Protocol
IntroductionTermsClients
Basic
DatatypesFLAPSNACTLV
UUIDsErrorsTool IDs
Host Interaction
Rate LimitsMigrationMessages
Other Services
ADMINADVERTALERT
BARTBOSBUCPCHAT
CHAT_NAV
Tutorials
Sign OnBARTRendezvous
ICBMLocateBuddies
Foodgroups
OSERVICE (0x0001)
LOCATE (0x0002)
BUDDY (0x0003)
ICBM (0x0004)
ADVERT (0x0005)
INVITE (0x0006)
ADMIN (0x0007)
POPUP (0x0008)
PD (0x0009)
USER_LOOKUP (0x000A)
STATS (0x000B)
TRANSLATE (0x000C)
CHAT_NAV (0x000D)
CHAT (0x000E)
ODIR (0x000F)
BART (0x0010)
FEEDBAG (0x0013)
ICQ (0x0015)
BUCP (0x0017)
ALERT (0x0018)
PLUGIN (0x0022)
UNNAMED_FG_24 (0x0024)
MDIR (0x0025)
ARS (0x044A)


To protect the server and other users from abusive clients, the server implements SNAC rate limiting. Rate limiting is done with a simple formula that calculates the average time between SNACs over the last few SNACs sent from the client to the server.

A client can optionally subscribe to notifications about its rates so that it can warn the user ahead of time or show UI about the rates. Even if the client does not subscribe, it will receive notifications when the rate limit has been reached and the server has started dropping SNACs. If the client continues to send SNACs, it will eventually be disconnected.

All SNACs are assigned to a Rate Class which controls the parameters to the rate limit forumla. Most SNACs are in the most lenient rate class by default, with SNACs like IM sending being in more strict classes. The rate formula is currentAvg = ((currentAvg * (windowSize -1)) + delta)/windowSize.

The currentAvg falling below certain thresholds causes the server to warn the client that it is about to be rate limited or disconnected. Once a client is rate limited, its average has to fall above the clear threshold before it can start sending SNACs again.

The actual parameters for the formula are not published in this document since they can change from time to time and are different depending on the current warning level and other things. A client can average around one IM every two seconds without being rate limited.

Client sends OSERVICE__RATE_PARAMS_QUERY

Server responds OSERVICE__RATE_PARAMS_REPLY

Client can send OSERVICE__RATE_ADD_PARAM_SUB to subscribe to specific rate changes.

Client can send OSERVICE__RATE_DEL_PARAM_SUB to unsubscribe to specific rate changes.

Server sends OSERVICE__RATE_PARAM_CHANGE when changes occur to any subscribed rate classes.