mirror of
https://github.com/status-im/nim-libp2p.git
synced 2025-02-02 16:14:15 +00:00
Replace table by seq for storing muxers (#741)
Replace table by seq for stocking muxers
This commit is contained in:
parent
78a65eebcc
commit
912873f8b3
@ -19,7 +19,7 @@ runnableExamples:
|
|||||||
{.push raises: [Defect].}
|
{.push raises: [Defect].}
|
||||||
|
|
||||||
import
|
import
|
||||||
options, tables, chronos, chronicles,
|
options, tables, chronos, chronicles, sequtils,
|
||||||
switch, peerid, peerinfo, stream/connection, multiaddress,
|
switch, peerid, peerinfo, stream/connection, multiaddress,
|
||||||
crypto/crypto, transports/[transport, tcptransport],
|
crypto/crypto, transports/[transport, tcptransport],
|
||||||
muxers/[muxer, mplex/mplex, yamux/yamux],
|
muxers/[muxer, mplex/mplex, yamux/yamux],
|
||||||
@ -38,15 +38,11 @@ type
|
|||||||
Noise,
|
Noise,
|
||||||
Secio {.deprecated.}
|
Secio {.deprecated.}
|
||||||
|
|
||||||
MuxerBuilder = object
|
|
||||||
codec: string
|
|
||||||
newMuxer: MuxerConstructor
|
|
||||||
|
|
||||||
SwitchBuilder* = ref object
|
SwitchBuilder* = ref object
|
||||||
privKey: Option[PrivateKey]
|
privKey: Option[PrivateKey]
|
||||||
addresses: seq[MultiAddress]
|
addresses: seq[MultiAddress]
|
||||||
secureManagers: seq[SecureProtocol]
|
secureManagers: seq[SecureProtocol]
|
||||||
muxers: seq[MuxerBuilder]
|
muxers: seq[MuxerProvider]
|
||||||
transports: seq[TransportProvider]
|
transports: seq[TransportProvider]
|
||||||
rng: ref HmacDrbgContext
|
rng: ref HmacDrbgContext
|
||||||
maxConnections: int
|
maxConnections: int
|
||||||
@ -119,13 +115,15 @@ proc withMplex*(
|
|||||||
outTimeout,
|
outTimeout,
|
||||||
maxChannCount)
|
maxChannCount)
|
||||||
|
|
||||||
b.muxers.add(MuxerBuilder(codec: MplexCodec, newMuxer: newMuxer))
|
assert b.muxers.countIt(it.codec == MplexCodec) == 0, "Mplex build multiple times"
|
||||||
|
b.muxers.add(MuxerProvider.new(newMuxer, MplexCodec))
|
||||||
b
|
b
|
||||||
|
|
||||||
proc withYamux*(b: SwitchBuilder): SwitchBuilder =
|
proc withYamux*(b: SwitchBuilder): SwitchBuilder =
|
||||||
proc newMuxer(conn: Connection): Muxer = Yamux.new(conn)
|
proc newMuxer(conn: Connection): Muxer = Yamux.new(conn)
|
||||||
|
|
||||||
b.muxers.add(MuxerBuilder(codec: YamuxCodec, newMuxer: newMuxer))
|
assert b.muxers.countIt(it.codec == YamuxCodec) == 0, "Yamux build multiple times"
|
||||||
|
b.muxers.add(MuxerProvider.new(newMuxer, YamuxCodec))
|
||||||
b
|
b
|
||||||
|
|
||||||
proc withNoise*(b: SwitchBuilder): SwitchBuilder {.public.} =
|
proc withNoise*(b: SwitchBuilder): SwitchBuilder {.public.} =
|
||||||
@ -212,18 +210,11 @@ proc build*(b: SwitchBuilder): Switch
|
|||||||
protoVersion = b.protoVersion,
|
protoVersion = b.protoVersion,
|
||||||
agentVersion = b.agentVersion)
|
agentVersion = b.agentVersion)
|
||||||
|
|
||||||
let
|
|
||||||
muxers = block:
|
|
||||||
var muxers: Table[string, MuxerProvider]
|
|
||||||
for m in b.muxers:
|
|
||||||
muxers[m.codec] = MuxerProvider.new(m.newMuxer, m.codec)
|
|
||||||
muxers
|
|
||||||
|
|
||||||
let
|
let
|
||||||
identify = Identify.new(peerInfo, b.sendSignedPeerRecord)
|
identify = Identify.new(peerInfo, b.sendSignedPeerRecord)
|
||||||
connManager = ConnManager.new(b.maxConnsPerPeer, b.maxConnections, b.maxIn, b.maxOut)
|
connManager = ConnManager.new(b.maxConnsPerPeer, b.maxConnections, b.maxIn, b.maxOut)
|
||||||
ms = MultistreamSelect.new()
|
ms = MultistreamSelect.new()
|
||||||
muxedUpgrade = MuxedUpgrade.new(identify, muxers, secureManagerInstances, connManager, ms)
|
muxedUpgrade = MuxedUpgrade.new(identify, b.muxers, secureManagerInstances, connManager, ms)
|
||||||
|
|
||||||
let
|
let
|
||||||
transports = block:
|
transports = block:
|
||||||
@ -248,7 +239,6 @@ proc build*(b: SwitchBuilder): Switch
|
|||||||
peerInfo = peerInfo,
|
peerInfo = peerInfo,
|
||||||
transports = transports,
|
transports = transports,
|
||||||
identity = identify,
|
identity = identify,
|
||||||
muxers = muxers,
|
|
||||||
secureManagers = secureManagerInstances,
|
secureManagers = secureManagerInstances,
|
||||||
connManager = connManager,
|
connManager = connManager,
|
||||||
ms = ms,
|
ms = ms,
|
||||||
|
@ -322,7 +322,6 @@ proc start*(s: Switch) {.async, gcsafe, public.} =
|
|||||||
proc newSwitch*(peerInfo: PeerInfo,
|
proc newSwitch*(peerInfo: PeerInfo,
|
||||||
transports: seq[Transport],
|
transports: seq[Transport],
|
||||||
identity: Identify,
|
identity: Identify,
|
||||||
muxers: Table[string, MuxerProvider],
|
|
||||||
secureManagers: openArray[Secure] = [],
|
secureManagers: openArray[Secure] = [],
|
||||||
connManager: ConnManager,
|
connManager: ConnManager,
|
||||||
ms: MultistreamSelect,
|
ms: MultistreamSelect,
|
||||||
|
@ -22,9 +22,14 @@ logScope:
|
|||||||
|
|
||||||
type
|
type
|
||||||
MuxedUpgrade* = ref object of Upgrade
|
MuxedUpgrade* = ref object of Upgrade
|
||||||
muxers*: Table[string, MuxerProvider]
|
muxers*: seq[MuxerProvider]
|
||||||
streamHandler*: StreamHandler
|
streamHandler*: StreamHandler
|
||||||
|
|
||||||
|
proc getMuxerByCodec(self: MuxedUpgrade, muxerName: string): MuxerProvider =
|
||||||
|
for m in self.muxers:
|
||||||
|
if muxerName in m.codecs:
|
||||||
|
return m
|
||||||
|
|
||||||
proc identify*(
|
proc identify*(
|
||||||
self: MuxedUpgrade,
|
self: MuxedUpgrade,
|
||||||
muxer: Muxer) {.async, gcsafe.} =
|
muxer: Muxer) {.async, gcsafe.} =
|
||||||
@ -50,7 +55,7 @@ proc mux*(
|
|||||||
warn "no muxers registered, skipping upgrade flow", conn
|
warn "no muxers registered, skipping upgrade flow", conn
|
||||||
return
|
return
|
||||||
|
|
||||||
let muxerName = await self.ms.select(conn, toSeq(self.muxers.keys()))
|
let muxerName = await self.ms.select(conn, self.muxers.mapIt(it.codec))
|
||||||
if muxerName.len == 0 or muxerName == "na":
|
if muxerName.len == 0 or muxerName == "na":
|
||||||
debug "no muxer available, early exit", conn
|
debug "no muxer available, early exit", conn
|
||||||
return
|
return
|
||||||
@ -58,7 +63,7 @@ proc mux*(
|
|||||||
trace "Found a muxer", conn, muxerName
|
trace "Found a muxer", conn, muxerName
|
||||||
|
|
||||||
# create new muxer for connection
|
# create new muxer for connection
|
||||||
let muxer = self.muxers[muxerName].newMuxer(conn)
|
let muxer = self.getMuxerByCodec(muxerName).newMuxer(conn)
|
||||||
|
|
||||||
# install stream handler
|
# install stream handler
|
||||||
muxer.streamHandler = self.streamHandler
|
muxer.streamHandler = self.streamHandler
|
||||||
@ -127,7 +132,7 @@ method upgradeIncoming*(
|
|||||||
|
|
||||||
cconn = sconn
|
cconn = sconn
|
||||||
# add the muxer
|
# add the muxer
|
||||||
for muxer in self.muxers.values:
|
for muxer in self.muxers:
|
||||||
ms.addHandler(muxer.codecs, muxer)
|
ms.addHandler(muxer.codecs, muxer)
|
||||||
|
|
||||||
# handle subsequent secure requests
|
# handle subsequent secure requests
|
||||||
@ -197,7 +202,7 @@ proc muxerHandler(
|
|||||||
proc new*(
|
proc new*(
|
||||||
T: type MuxedUpgrade,
|
T: type MuxedUpgrade,
|
||||||
identity: Identify,
|
identity: Identify,
|
||||||
muxers: Table[string, MuxerProvider],
|
muxers: seq[MuxerProvider],
|
||||||
secureManagers: openArray[Secure] = [],
|
secureManagers: openArray[Secure] = [],
|
||||||
connManager: ConnManager,
|
connManager: ConnManager,
|
||||||
ms: MultistreamSelect): T =
|
ms: MultistreamSelect): T =
|
||||||
|
@ -61,7 +61,7 @@ proc createSwitch(ma: MultiAddress; outgoing: bool, secio: bool = false): (Switc
|
|||||||
let
|
let
|
||||||
identify = Identify.new(peerInfo)
|
identify = Identify.new(peerInfo)
|
||||||
mplexProvider = MuxerProvider.new(createMplex, MplexCodec)
|
mplexProvider = MuxerProvider.new(createMplex, MplexCodec)
|
||||||
muxers = [(MplexCodec, mplexProvider)].toTable()
|
muxers = @[mplexProvider]
|
||||||
secureManagers = if secio:
|
secureManagers = if secio:
|
||||||
[Secure(Secio.new(rng, privateKey))]
|
[Secure(Secio.new(rng, privateKey))]
|
||||||
else:
|
else:
|
||||||
@ -75,7 +75,6 @@ proc createSwitch(ma: MultiAddress; outgoing: bool, secio: bool = false): (Switc
|
|||||||
peerInfo,
|
peerInfo,
|
||||||
transports,
|
transports,
|
||||||
identify,
|
identify,
|
||||||
muxers,
|
|
||||||
secureManagers,
|
secureManagers,
|
||||||
connManager,
|
connManager,
|
||||||
ms)
|
ms)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user