2019-08-20 16:18:15 +00:00
|
|
|
## Nim-LibP2P
|
2019-09-24 17:48:23 +00:00
|
|
|
## Copyright (c) 2019 Status Research & Development GmbH
|
2019-08-20 16:18:15 +00:00
|
|
|
## Licensed under either of
|
|
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
|
|
## at your option.
|
|
|
|
## This file may not be copied, modified, or distributed except according to
|
|
|
|
## those terms.
|
|
|
|
|
2020-08-08 06:52:20 +00:00
|
|
|
{.push raises: [Defect].}
|
|
|
|
|
2021-05-22 18:27:30 +00:00
|
|
|
import std/[options, sequtils, hashes]
|
|
|
|
import pkg/[chronos, chronicles, stew/results]
|
|
|
|
import peerid, multiaddress, crypto/crypto, errors
|
2019-08-20 16:18:15 +00:00
|
|
|
|
2021-05-22 18:27:30 +00:00
|
|
|
export peerid, multiaddress, crypto, errors, results
|
2020-07-01 07:22:29 +00:00
|
|
|
|
2021-09-08 09:07:46 +00:00
|
|
|
## Our local peer info
|
2019-12-07 16:36:39 +00:00
|
|
|
|
|
|
|
type
|
2021-05-22 18:27:30 +00:00
|
|
|
PeerInfoError* = LPError
|
|
|
|
|
2021-09-08 09:07:46 +00:00
|
|
|
PeerInfo* = ref object
|
2019-12-07 16:36:39 +00:00
|
|
|
peerId*: PeerID
|
2019-12-04 04:44:54 +00:00
|
|
|
addrs*: seq[MultiAddress]
|
|
|
|
protocols*: seq[string]
|
2020-06-09 18:42:52 +00:00
|
|
|
protoVersion*: string
|
|
|
|
agentVersion*: string
|
2021-09-08 09:07:46 +00:00
|
|
|
privateKey*: PrivateKey
|
|
|
|
publicKey*: PublicKey
|
2019-12-07 16:36:39 +00:00
|
|
|
|
2020-09-06 08:31:47 +00:00
|
|
|
func shortLog*(p: PeerInfo): auto =
|
2020-06-09 18:42:52 +00:00
|
|
|
(
|
2020-09-06 08:31:47 +00:00
|
|
|
peerId: $p.peerId,
|
2020-06-09 18:42:52 +00:00
|
|
|
addrs: mapIt(p.addrs, $it),
|
|
|
|
protocols: mapIt(p.protocols, $it),
|
|
|
|
protoVersion: p.protoVersion,
|
|
|
|
agentVersion: p.agentVersion,
|
|
|
|
)
|
2020-09-06 08:31:47 +00:00
|
|
|
chronicles.formatIt(PeerInfo): shortLog(it)
|
2020-05-11 19:05:24 +00:00
|
|
|
|
2021-10-25 08:26:32 +00:00
|
|
|
proc new*(
|
2021-05-21 16:27:01 +00:00
|
|
|
p: typedesc[PeerInfo],
|
|
|
|
key: PrivateKey,
|
|
|
|
addrs: openarray[MultiAddress] = [],
|
|
|
|
protocols: openarray[string] = [],
|
|
|
|
protoVersion: string = "",
|
2021-05-22 18:27:30 +00:00
|
|
|
agentVersion: string = ""): PeerInfo
|
|
|
|
{.raises: [Defect, PeerInfoError].} =
|
|
|
|
|
2021-09-08 09:07:46 +00:00
|
|
|
let pubkey = try:
|
2021-10-25 08:26:32 +00:00
|
|
|
key.getPublicKey().tryGet()
|
2021-09-08 09:07:46 +00:00
|
|
|
except CatchableError:
|
|
|
|
raise newException(PeerInfoError, "invalid private key")
|
2021-05-21 16:27:01 +00:00
|
|
|
|
|
|
|
let peerInfo = PeerInfo(
|
2021-05-22 18:27:30 +00:00
|
|
|
peerId: PeerID.init(key).tryGet(),
|
2021-09-08 09:07:46 +00:00
|
|
|
publicKey: pubkey,
|
|
|
|
privateKey: key,
|
2021-05-21 16:27:01 +00:00
|
|
|
protoVersion: protoVersion,
|
2021-09-08 09:07:46 +00:00
|
|
|
agentVersion: agentVersion,
|
|
|
|
addrs: @addrs,
|
|
|
|
protocols: @protocols)
|
2021-05-21 16:27:01 +00:00
|
|
|
|
|
|
|
return peerInfo
|