kicad/thirdparty/sentry-native/src/sentry_ratelimiter.h

60 lines
1.6 KiB
C

#ifndef SENTRY_RATELIMITER_H_INCLUDED
#define SENTRY_RATELIMITER_H_INCLUDED
#include "sentry_boot.h"
#define SENTRY_RL_CATEGORY_ANY 0
#define SENTRY_RL_CATEGORY_ERROR 1
#define SENTRY_RL_CATEGORY_SESSION 2
#define SENTRY_RL_CATEGORY_TRANSACTION 3
typedef struct sentry_rate_limiter_s sentry_rate_limiter_t;
/**
* This will create a new rate limiter.
*/
sentry_rate_limiter_t *sentry__rate_limiter_new(void);
/**
* Free a previously allocated rate limiter.
*/
void sentry__rate_limiter_free(sentry_rate_limiter_t *rl);
/**
* This will update the rate limiters internal state based on the
* `X-Sentry-Rate-Limits` header.
*/
bool sentry__rate_limiter_update_from_header(
sentry_rate_limiter_t *rl, const char *sentry_header);
/**
* This will update the rate limiters internal state based on the `Retry-After`
* header.
*/
bool sentry__rate_limiter_update_from_http_retry_after(
sentry_rate_limiter_t *rl, const char *retry_after);
/**
* This will update the rate limiters internal state based on receiving a 429
* status code.
*/
bool sentry__rate_limiter_update_from_429(sentry_rate_limiter_t *rl);
/**
* This will return `true` if the specified `category` is currently rate
* limited.
*/
bool sentry__rate_limiter_is_disabled(
const sentry_rate_limiter_t *rl, int category);
#ifdef SENTRY_UNITTEST
/**
* The rate limiters state is completely opaque. Unless in tests, where we would
* want to actually peek into the specific rate limiting `category`.
*/
uint64_t sentry__rate_limiter_get_disabled_until(
const sentry_rate_limiter_t *rl, int category);
#endif
#endif