mirror of
https://github.com/status-im/nim-dagger.git
synced 2025-01-30 16:36:26 +00:00
f25c555d59
* Move to version 2.0.6 * Update nim-confutils submodule to latest version * Update dependencies * Update Nim version to 2.0.12 * Add gcsafe pragma * Add missing import * Update specific conf for Nim 2.x * Fix method signatures * Revert erasure coding attempt to fix bug * More gcsafe pragma * Duplicate code from libp2p because it is not exported anymore * Fix camelcase function names * Use alreadySeen because need is not a bool anymore * newLPStreamReadError does not exist anymore so use another error * Replace ValidIpAddress by IpAddress * Add gcsafe pragma * Restore maintenance parameter deleted by mistake when removing esasure coding fix attempt code * Update method signatures * Copy LPStreamReadError code from libp2p which was removed * Fix camel case * Fix enums in tests * Fix camel case * Extract node components to a variable to make Nim 2 happy * Update the tests using ValidIpAddress to IpAddress * Fix cast for value which is already an option * Set nim version to 2.0.x for CI * Set nim version to 2.0.x for CI * Move to miniupnp version 2.2.4 to avoid symlink error * Set core.symlinks to false for Windows for miniupnp >= 2.2.5 support * Update to Nim 2.0.14 * Update CI nim versions to 2.0.14 * Try with GCC 14 * Replace apt-fast by apt-get * Update ubuntu runner to latest * Use Ubuntu 20.04 for coverage * Disable CI cache for coverage * Add coverage property description * Remove commented test * Check the node value of seen instead of using alreadySeen * Fix the merge. The taskpool work was reverted. * Update nim-ethers submodule * Remove deprecated ValidIpAddress. Fix missing case and imports. * Fix a weird issue where nim-confutils cannot find NatAny * Fix tests and remove useless static keyword
68 lines
1.8 KiB
Nim
68 lines
1.8 KiB
Nim
{.push raises: [].}
|
|
|
|
import
|
|
std/[tables, hashes],
|
|
stew/results, stew/shims/net as stewNet, chronos, chronicles
|
|
|
|
import pkg/libp2p
|
|
|
|
type
|
|
NatStrategy* = enum
|
|
NatAny
|
|
NatUpnp
|
|
NatPmp
|
|
NatNone
|
|
|
|
type
|
|
IpLimits* = object
|
|
limit*: uint
|
|
ips: Table[IpAddress, uint]
|
|
|
|
func hash*(ip: IpAddress): Hash =
|
|
case ip.family
|
|
of IpAddressFamily.IPv6: hash(ip.address_v6)
|
|
of IpAddressFamily.IPv4: hash(ip.address_v4)
|
|
|
|
func inc*(ipLimits: var IpLimits, ip: IpAddress): bool =
|
|
let val = ipLimits.ips.getOrDefault(ip, 0)
|
|
if val < ipLimits.limit:
|
|
ipLimits.ips[ip] = val + 1
|
|
true
|
|
else:
|
|
false
|
|
|
|
func dec*(ipLimits: var IpLimits, ip: IpAddress) =
|
|
let val = ipLimits.ips.getOrDefault(ip, 0)
|
|
if val == 1:
|
|
ipLimits.ips.del(ip)
|
|
elif val > 1:
|
|
ipLimits.ips[ip] = val - 1
|
|
|
|
func isGlobalUnicast*(address: TransportAddress): bool =
|
|
if address.isGlobal() and address.isUnicast():
|
|
true
|
|
else:
|
|
false
|
|
|
|
func isGlobalUnicast*(address: IpAddress): bool =
|
|
let a = initTAddress(address, Port(0))
|
|
a.isGlobalUnicast()
|
|
|
|
proc getRouteIpv4*(): Result[IpAddress, cstring] =
|
|
# Avoiding Exception with initTAddress and can't make it work with static.
|
|
# Note: `publicAddress` is only used an "example" IP to find the best route,
|
|
# no data is send over the network to this IP!
|
|
let
|
|
publicAddress = TransportAddress(family: AddressFamily.IPv4,
|
|
address_v4: [1'u8, 1, 1, 1], port: Port(0))
|
|
route = getBestRoute(publicAddress)
|
|
|
|
if route.source.isUnspecified():
|
|
err("No best ipv4 route found")
|
|
else:
|
|
let ip = try: route.source.address()
|
|
except ValueError as e:
|
|
# This should not occur really.
|
|
error "Address conversion error", exception = e.name, msg = e.msg
|
|
return err("Invalid IP address")
|
|
ok(ip) |