Skip to content

Commit

Permalink
Simplify api
Browse files Browse the repository at this point in the history
  • Loading branch information
diegomrsantos committed Mar 6, 2023
1 parent 92bfd83 commit 88f3ae2
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 40 deletions.
33 changes: 15 additions & 18 deletions libp2p/observedaddrmanager.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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 =
Expand Down
10 changes: 3 additions & 7 deletions libp2p/peerstore.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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)
12 changes: 5 additions & 7 deletions libp2p/protocols/identify.nim
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import ../protobuf/minprotobuf,
../errors,
../observedaddrmanager

export observedaddrmanager

logScope:
topics = "libp2p identify"

Expand Down Expand Up @@ -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()
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)
17 changes: 9 additions & 8 deletions tests/testobservedaddrmanager.nim
Original file line number Diff line number Diff line change
Expand Up @@ -17,32 +17,33 @@ 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()

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

0 comments on commit 88f3ae2

Please sign in to comment.