Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrLimitExceeded = errors.New("too many concurrent connections") ErrThrottleExceeded = errors.New("too many recent connection attempts") )
Functions ¶
This section is empty.
Types ¶
type GenericThrottle ¶ added in v1.0.0
type GenericThrottle struct {
ThrottleDetails // variable state: what events have been seen
// these are constant after creation:
Duration time.Duration // window length to consider
Limit int // number of events allowed per window
}
GenericThrottle allows enforcing limits of the form "at most X events per time window of duration Y"
type Limiter ¶
Limiter manages the automated client connection limits.
func (*Limiter) AddClient ¶
AddClient adds a client to our population if possible. If we can't, throws an error instead. 'force' is used to add already-existing clients (i.e. ones that are already on the network).
func (*Limiter) ApplyConfig ¶
func (cl *Limiter) ApplyConfig(config LimiterConfig) error
ApplyConfig atomically applies a config update to a connection limit handler
func (*Limiter) RemoveClient ¶
RemoveClient removes the given address from our population
type LimiterConfig ¶
type LimiterConfig struct {
Enabled bool
CidrLenIPv4 int `yaml:"cidr-len-ipv4"`
CidrLenIPv6 int `yaml:"cidr-len-ipv6"`
ConnsPerSubnet int `yaml:"connections-per-subnet"`
IPsPerSubnet int `yaml:"ips-per-subnet"` // legacy name for ConnsPerSubnet
Exempted []string
}
LimiterConfig controls the automated connection limits.
type ThrottleDetails ¶
ThrottleDetails holds the connection-throttling details for a subnet/IP.
type Throttler ¶
Throttler manages automated client connection throttling.
func (*Throttler) AddClient ¶
AddClient introduces a new client connection if possible. If we can't, throws an error instead.
func (*Throttler) ApplyConfig ¶
func (ct *Throttler) ApplyConfig(config ThrottlerConfig) error
ApplyConfig atomically applies a config update to a throttler
func (*Throttler) BanDuration ¶
func (*Throttler) BanMessage ¶
type ThrottlerConfig ¶
type ThrottlerConfig struct {
Enabled bool
CidrLenIPv4 int `yaml:"cidr-len-ipv4"`
CidrLenIPv6 int `yaml:"cidr-len-ipv6"`
ConnectionsPerCidr int `yaml:"max-connections"`
DurationString string `yaml:"duration"`
Duration time.Duration `yaml:"duration-time"`
BanDurationString string `yaml:"ban-duration"`
BanDuration time.Duration
BanMessage string `yaml:"ban-message"`
Exempted []string
}
ThrottlerConfig controls the automated connection throttling.
type TorLimiter ¶ added in v1.1.0
TorLimiter is a combined limiter and throttler for use on connections proxied from a Tor hidden service (so we don't have meaningful IPs, a notion of CIDR width, etc.)
func (*TorLimiter) AddClient ¶ added in v1.1.0
func (tl *TorLimiter) AddClient() error
func (*TorLimiter) Configure ¶ added in v1.1.0
func (tl *TorLimiter) Configure(maxConnections int, duration time.Duration, maxConnectionsPerDuration int)
func (*TorLimiter) RemoveClient ¶ added in v1.1.0
func (tl *TorLimiter) RemoveClient()