mirror of
https://github.com/logos-storage/logos-storage-nim-dht.git
synced 2026-01-08 00:13:07 +00:00
add missing constructor
This commit is contained in:
parent
877b8d8b45
commit
6e3179d372
@ -1032,6 +1032,76 @@ func init*(
|
|||||||
bitsPerHop: bitsPerHop
|
bitsPerHop: bitsPerHop
|
||||||
)
|
)
|
||||||
|
|
||||||
|
proc newProtocol*(
|
||||||
|
privKey: PrivateKey,
|
||||||
|
enrIp: Option[ValidIpAddress],
|
||||||
|
enrTcpPort, enrUdpPort: Option[Port],
|
||||||
|
localEnrFields: openArray[(string, seq[byte])] = [],
|
||||||
|
bootstrapRecords: openArray[SignedPeerRecord] = [],
|
||||||
|
previousRecord = none[SignedPeerRecord](),
|
||||||
|
bindPort: Port,
|
||||||
|
bindIp = IPv4_any(),
|
||||||
|
enrAutoUpdate = false,
|
||||||
|
config = defaultDiscoveryConfig,
|
||||||
|
rng = newRng(),
|
||||||
|
providers = ProvidersManager.new(
|
||||||
|
SQLiteDatastore.new(Memory)
|
||||||
|
.expect("Should not fail!"))
|
||||||
|
): Protocol =
|
||||||
|
# TODO: Tried adding bindPort = udpPort as parameter but that gave
|
||||||
|
# "Error: internal error: environment misses: udpPort" in nim-beacon-chain.
|
||||||
|
# Anyhow, nim-beacon-chain would also require some changes to support port
|
||||||
|
# remapping through NAT and this API is also subject to change once we
|
||||||
|
# introduce support for ipv4 + ipv6 binding/listening.
|
||||||
|
|
||||||
|
# TODO: Implement SignedPeerRecord custom fields?
|
||||||
|
# let extraFields = mapIt(localEnrFields, toFieldPair(it[0], it[1]))
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# - Defect as is now or return a result for spr errors?
|
||||||
|
# - In case incorrect key, allow for new spr based on new key (new node id)?
|
||||||
|
var record: SignedPeerRecord
|
||||||
|
if previousRecord.isSome():
|
||||||
|
record = previousRecord.get()
|
||||||
|
record.update(privKey, enrIp, enrTcpPort, enrUdpPort)
|
||||||
|
.expect("SignedPeerRecord within size limits and correct key")
|
||||||
|
else:
|
||||||
|
record = SignedPeerRecord.init(1, privKey, enrIp, enrTcpPort, enrUdpPort)
|
||||||
|
.expect("SignedPeerRecord within size limits")
|
||||||
|
|
||||||
|
info "SPR initialized", ip = enrIp, tcp = enrTcpPort, udp = enrUdpPort,
|
||||||
|
seqNum = record.seqNum, uri = toURI(record)
|
||||||
|
if enrIp.isNone():
|
||||||
|
if enrAutoUpdate:
|
||||||
|
notice "No external IP provided for the SPR, this node will not be " &
|
||||||
|
"discoverable until the SPR is updated with the discovered external IP address"
|
||||||
|
else:
|
||||||
|
warn "No external IP provided for the SPR, this node will not be discoverable"
|
||||||
|
|
||||||
|
let node = newNode(record).expect("Properly initialized record")
|
||||||
|
|
||||||
|
# TODO Consider whether this should be a Defect
|
||||||
|
doAssert rng != nil, "RNG initialization failed"
|
||||||
|
|
||||||
|
let
|
||||||
|
routingTable = RoutingTable.init(
|
||||||
|
node,
|
||||||
|
config.bitsPerHop,
|
||||||
|
config.tableIpLimits,
|
||||||
|
rng)
|
||||||
|
|
||||||
|
result = Protocol(
|
||||||
|
privateKey: privKey,
|
||||||
|
localNode: node,
|
||||||
|
bootstrapRecords: @bootstrapRecords,
|
||||||
|
ipVote: IpVote.init(),
|
||||||
|
enrAutoUpdate: enrAutoUpdate,
|
||||||
|
routingTable: routingTable,
|
||||||
|
rng: rng,
|
||||||
|
providers: providers)
|
||||||
|
|
||||||
|
result.transport = newTransport(result, privKey, node, bindPort, bindIp, rng)
|
||||||
|
|
||||||
proc newProtocol*(
|
proc newProtocol*(
|
||||||
privKey: PrivateKey,
|
privKey: PrivateKey,
|
||||||
bindPort: Port,
|
bindPort: Port,
|
||||||
@ -1041,7 +1111,8 @@ proc newProtocol*(
|
|||||||
config = defaultDiscoveryConfig,
|
config = defaultDiscoveryConfig,
|
||||||
rng = newRng(),
|
rng = newRng(),
|
||||||
providers = ProvidersManager.new(SQLiteDatastore.new(Memory)
|
providers = ProvidersManager.new(SQLiteDatastore.new(Memory)
|
||||||
.expect("Should not fail!"))): Protocol =
|
.expect("Should not fail!"))
|
||||||
|
): Protocol =
|
||||||
## Initialize DHT protocol
|
## Initialize DHT protocol
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user