2022-01-18 08:01:22 +00:00
|
|
|
import
|
2022-05-12 16:04:37 +00:00
|
|
|
std/strutils,
|
|
|
|
confutils,
|
2022-01-18 08:01:22 +00:00
|
|
|
eth/p2p/discoveryv5/routing_table
|
|
|
|
|
|
|
|
type
|
2022-05-12 16:04:37 +00:00
|
|
|
RadiusConfigKind* = enum
|
|
|
|
Static, Dynamic
|
|
|
|
|
|
|
|
RadiusConfig* = object
|
|
|
|
case kind*: RadiusConfigKind
|
|
|
|
of Static:
|
|
|
|
logRadius*: uint16
|
|
|
|
of Dynamic:
|
|
|
|
discard
|
|
|
|
|
2022-01-18 08:01:22 +00:00
|
|
|
PortalProtocolConfig* = object
|
|
|
|
tableIpLimits*: TableIpLimits
|
|
|
|
bitsPerHop*: int
|
2022-05-12 16:04:37 +00:00
|
|
|
radiusConfig*: RadiusConfig
|
2022-01-18 08:01:22 +00:00
|
|
|
|
|
|
|
const
|
2022-05-12 16:04:37 +00:00
|
|
|
defaultRadiusConfig* = RadiusConfig(kind: Dynamic)
|
|
|
|
|
2022-01-18 08:01:22 +00:00
|
|
|
defaultPortalProtocolConfig* = PortalProtocolConfig(
|
|
|
|
tableIpLimits: DefaultTableIpLimits,
|
2022-05-12 16:04:37 +00:00
|
|
|
bitsPerHop: DefaultBitsPerHop,
|
|
|
|
radiusConfig: defaultRadiusConfig
|
|
|
|
)
|
2022-01-18 08:01:22 +00:00
|
|
|
|
|
|
|
proc init*(
|
|
|
|
T: type PortalProtocolConfig,
|
|
|
|
tableIpLimit: uint,
|
|
|
|
bucketIpLimit: uint,
|
2022-05-12 16:04:37 +00:00
|
|
|
bitsPerHop: int,
|
|
|
|
radiusConfig: RadiusConfig): T =
|
2022-01-18 08:01:22 +00:00
|
|
|
|
|
|
|
PortalProtocolConfig(
|
|
|
|
tableIpLimits: TableIpLimits(
|
|
|
|
tableIpLimit: tableIpLimit,
|
|
|
|
bucketIpLimit: bucketIpLimit),
|
2022-05-12 16:04:37 +00:00
|
|
|
bitsPerHop: bitsPerHop,
|
|
|
|
radiusConfig: radiusConfig
|
2022-01-18 08:01:22 +00:00
|
|
|
)
|
|
|
|
|
2022-05-12 16:04:37 +00:00
|
|
|
proc parseCmdArg*(T: type RadiusConfig, p: TaintedString): T
|
|
|
|
{.raises: [Defect, ConfigurationError].} =
|
|
|
|
|
|
|
|
if p.startsWith("dynamic") and len(p) == 7:
|
|
|
|
return RadiusConfig(kind: Dynamic)
|
|
|
|
elif p.startsWith("static:"):
|
|
|
|
let num = p[7..^1]
|
|
|
|
try:
|
|
|
|
let parsed = uint16.parseCmdArg(num)
|
|
|
|
|
|
|
|
if parsed > 256:
|
|
|
|
raise newException(
|
|
|
|
ConfigurationError, "Provided logRadius should be <= 256"
|
|
|
|
)
|
|
|
|
|
|
|
|
return RadiusConfig(kind: Static, logRadius: parsed)
|
|
|
|
except ValueError:
|
|
|
|
let msg = "Provided logRadius: " & num & " is not a valid number"
|
|
|
|
raise newException(
|
|
|
|
ConfigurationError, msg
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
let msg =
|
|
|
|
"Not supported radius config option: " & p & " . " &
|
|
|
|
"Supported options: dynamic, static:logRadius"
|
|
|
|
raise newException(
|
|
|
|
ConfigurationError,
|
|
|
|
msg
|
|
|
|
)
|
|
|
|
|
|
|
|
proc completeCmdArg*(T: type RadiusConfig, val: TaintedString): seq[string] =
|
|
|
|
return @[]
|