status-go/vendor/github.com/libp2p/go-libp2p/p2p/protocol/autonatv2/options.go

65 lines
1.8 KiB
Go

package autonatv2
import "time"
// autoNATSettings is used to configure AutoNAT
type autoNATSettings struct {
allowPrivateAddrs bool
serverRPM int
serverPerPeerRPM int
serverDialDataRPM int
dataRequestPolicy dataRequestPolicyFunc
now func() time.Time
amplificatonAttackPreventionDialWait time.Duration
metricsTracer MetricsTracer
}
func defaultSettings() *autoNATSettings {
return &autoNATSettings{
allowPrivateAddrs: false,
serverRPM: 60, // 1 every second
serverPerPeerRPM: 12, // 1 every 5 seconds
serverDialDataRPM: 12, // 1 every 5 seconds
dataRequestPolicy: amplificationAttackPrevention,
amplificatonAttackPreventionDialWait: 3 * time.Second,
now: time.Now,
}
}
type AutoNATOption func(s *autoNATSettings) error
func WithServerRateLimit(rpm, perPeerRPM, dialDataRPM int) AutoNATOption {
return func(s *autoNATSettings) error {
s.serverRPM = rpm
s.serverPerPeerRPM = perPeerRPM
s.serverDialDataRPM = dialDataRPM
return nil
}
}
func WithMetricsTracer(m MetricsTracer) AutoNATOption {
return func(s *autoNATSettings) error {
s.metricsTracer = m
return nil
}
}
func withDataRequestPolicy(drp dataRequestPolicyFunc) AutoNATOption {
return func(s *autoNATSettings) error {
s.dataRequestPolicy = drp
return nil
}
}
func allowPrivateAddrs(s *autoNATSettings) error {
s.allowPrivateAddrs = true
return nil
}
func withAmplificationAttackPreventionDialWait(d time.Duration) AutoNATOption {
return func(s *autoNATSettings) error {
s.amplificatonAttackPreventionDialWait = d
return nil
}
}