From 88f3ae2d92c599c9378a8092590e2616a91f458b Mon Sep 17 00:00:00 2001 From: Diego Date: Mon, 6 Mar 2023 12:58:54 +0100 Subject: [PATCH] Simplify api --- libp2p/observedaddrmanager.nim | 33 ++++++++++++++----------------- libp2p/peerstore.nim | 10 +++------- libp2p/protocols/identify.nim | 12 +++++------ tests/testobservedaddrmanager.nim | 17 ++++++++-------- 4 files changed, 32 insertions(+), 40 deletions(-) diff --git a/libp2p/observedaddrmanager.nim b/libp2p/observedaddrmanager.nim index c470414003..2c92326ce6 100644 --- a/libp2p/observedaddrmanager.nim +++ b/libp2p/observedaddrmanager.nim @@ -25,6 +25,9 @@ type maxSize: int minCount: int + IPVersion* = enum + IPv4, IPv6 + proc add(self:ObservedAddrManager, observations: var seq[MultiAddress], observedAddr: MultiAddress) = if observations.len >= self.maxSize: observations.del(0) @@ -48,30 +51,24 @@ proc getIP(self: ObservedAddrManager, observations: seq[MultiAddress], ipVersion return Opt.some(ma) return Opt.none(MultiAddress) -proc getMostObservedIP6*(self: ObservedAddrManager): Opt[MultiAddress] = - ## Returns the most observed IP6 address or none if the number of observations are less than minCount. - return self.getIP(self.observedIPs, IP6) - -proc getMostObservedIP4*(self: ObservedAddrManager): Opt[MultiAddress] = - ## Returns the most observed IP4 address or none if the number of observations are less than minCount. - return self.getIP(self.observedIPs, IP4) - -proc getMostObservedIP6AndPort*(self: ObservedAddrManager): Opt[MultiAddress] = - ## Returns the most observed IP6/Port address or none if the number of observations are less than minCount. - return self.getIP(self.observedIPsAndPorts, IP6) +proc getMostObservedIP*(self: ObservedAddrManager, ipVersion: IPVersion): Opt[MultiAddress] = + ## Returns the most observed IP address or none if the number of observations are less than minCount. + return self.getIP(self.observedIPs, if ipVersion == IPv4: IP4 else: IP6) -proc getMostObservedIP4AndPort*(self: ObservedAddrManager): Opt[MultiAddress] = - ## Returns the most observed IP4/Port address or none if the number of observations are less than minCount. - return self.getIP(self.observedIPsAndPorts, IP4) +proc getMostObservedIPAndPort*(self: ObservedAddrManager, ipVersion: IPVersion): Opt[MultiAddress] = + ## Returns the most observed IP/Port address or none if the number of observations are less than minCount. + return self.getIP(self.observedIPsAndPorts, if ipVersion == IPv4: IP4 else: IP6) proc getMostObservedIPsAndPorts*(self: ObservedAddrManager): seq[MultiAddress] = ## Returns the most observed IP4/Port and IP6/Port address or an empty seq if the number of observations ## are less than minCount. var res: seq[MultiAddress] - if self.getMostObservedIP4().isSome(): - res.add(self.getMostObservedIP4().get()) - if self.getMostObservedIP6().isSome(): - res.add(self.getMostObservedIP6().get()) + let ip4 = self.getMostObservedIPAndPort(IPv4) + if ip4.isSome(): + res.add(ip4.get()) + let ip6 = self.getMostObservedIPAndPort(IPv6) + if ip6.isSome(): + res.add(ip6.get()) return res proc `$`*(self: ObservedAddrManager): string = diff --git a/libp2p/peerstore.nim b/libp2p/peerstore.nim index 14e9063989..6dcc68ef4e 100644 --- a/libp2p/peerstore.nim +++ b/libp2p/peerstore.nim @@ -221,10 +221,6 @@ proc identify*( finally: await stream.closeWithEOF() -proc getMostObservedIP6*(self: PeerStore): Opt[MultiAddress] = - ## Returns the most observed IP6 address or none if the number of observations are less than minCount. - return self.identify.getMostObservedIP6() - -proc getMostObservedIP4*(self: PeerStore): Opt[MultiAddress] = - ## Returns the most observed IP4 address or none if the number of observations are less than minCount. - return self.identify.getMostObservedIP4() +proc getMostObservedIP*(self: PeerStore, ipVersion: IPVersion): Opt[MultiAddress] = + ## Returns the most observed IP address or none if the number of observations are less than minCount. + return self.identify.getMostObservedIP(ipVersion) diff --git a/libp2p/protocols/identify.nim b/libp2p/protocols/identify.nim index d1d60dc4d9..be467ec50a 100644 --- a/libp2p/protocols/identify.nim +++ b/libp2p/protocols/identify.nim @@ -29,6 +29,8 @@ import ../protobuf/minprotobuf, ../errors, ../observedaddrmanager +export observedaddrmanager + logScope: topics = "libp2p identify" @@ -259,10 +261,6 @@ proc push*(p: IdentifyPush, peerInfo: PeerInfo, conn: Connection) {.async, publi var pb = encodeMsg(peerInfo, conn.observedAddr, true) await conn.writeLp(pb.buffer) -proc getMostObservedIP6*(self: Identify): Opt[MultiAddress] = - ## Returns the most observed IP6 address or none if the number of observations are less than minCount. - return self.observedAddrManager.getMostObservedIP6() - -proc getMostObservedIP4*(self: Identify): Opt[MultiAddress] = - ## Returns the most observed IP4 address or none if the number of observations are less than minCount. - return self.observedAddrManager.getMostObservedIP4() \ No newline at end of file +proc getMostObservedIP*(self: Identify, ipVersion: IPVersion): Opt[MultiAddress] = + ## Returns the most observed IP address or none if the number of observations are less than minCount. + return self.observedAddrManager.getMostObservedIP(ipVersion) diff --git a/tests/testobservedaddrmanager.nim b/tests/testobservedaddrmanager.nim index 0d6f7e0d38..cc47d3694c 100644 --- a/tests/testobservedaddrmanager.nim +++ b/tests/testobservedaddrmanager.nim @@ -17,17 +17,18 @@ suite "ObservedAddrManager": observedAddrManager.add(mostObservedIP4AndPort) observedAddrManager.add(mostObservedIP4AndPort) - check observedAddrManager.getMostObservedIP4().isNone() + check observedAddrManager.getMostObservedIP(IPv4).isNone() + check observedAddrManager.getMostObservedIP(IPv6).isNone() observedAddrManager.add(MultiAddress.init("/ip4/1.2.3.0/tcp/2").get()) observedAddrManager.add(MultiAddress.init("/ip4/1.2.3.1/tcp/1").get()) - check observedAddrManager.getMostObservedIP4().get() == MultiAddress.init("/ip4/1.2.3.0").get() - check observedAddrManager.getMostObservedIP4AndPort().isNone() + check observedAddrManager.getMostObservedIP(IPv4).get() == MultiAddress.init("/ip4/1.2.3.0").get() + check observedAddrManager.getMostObservedIPAndPort(IPv4).isNone() observedAddrManager.add(mostObservedIP4AndPort) - check observedAddrManager.getMostObservedIP4AndPort().get() == mostObservedIP4AndPort + check observedAddrManager.getMostObservedIPAndPort(IPv4).get() == mostObservedIP4AndPort # Calculate the most oberserved IP6 correctly let mostObservedIP6AndPort = MultiAddress.init("/ip6/::1/tcp/1").get() @@ -35,14 +36,14 @@ suite "ObservedAddrManager": observedAddrManager.add(mostObservedIP6AndPort) observedAddrManager.add(mostObservedIP6AndPort) - check observedAddrManager.getMostObservedIP6().isNone() + check observedAddrManager.getMostObservedIP(IPv6).isNone() observedAddrManager.add(MultiAddress.init("/ip6/::1/tcp/2").get()) observedAddrManager.add(MultiAddress.init("/ip6/::2/tcp/1").get()) - check observedAddrManager.getMostObservedIP6().get() == MultiAddress.init("/ip6/::1").get() - check observedAddrManager.getMostObservedIP6AndPort().isNone() + check observedAddrManager.getMostObservedIP(IPv6).get() == MultiAddress.init("/ip6/::1").get() + check observedAddrManager.getMostObservedIPAndPort(IPv6).isNone() observedAddrManager.add(mostObservedIP6AndPort) - check observedAddrManager.getMostObservedIP6AndPort().get() == mostObservedIP6AndPort + check observedAddrManager.getMostObservedIPAndPort(IPv6).get() == mostObservedIP6AndPort