mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-29 17:01:37 +00:00
feat: connection gater (#1142)
Port of https://github.com/libp2p/go-libp2p-core/blob/master/connmgr/gater.go Adds a new configuration key `connectionGater` which allows denying the dialing of certain peers, individual multiaddrs and the creation of connections at certain points in the connection flow. Fixes: https://github.com/libp2p/js-libp2p/issues/175 Refs: https://github.com/libp2p/js-libp2p/issues/744 Refs: https://github.com/libp2p/js-libp2p/issues/769 Co-authored-by: mzdws <8580712+mzdws@user.noreply.gitee.com>
This commit is contained in:
@ -18,7 +18,7 @@ const swarmKeyBuffer = uint8ArrayFromString(require('../fixtures/swarm.key'))
|
||||
const Libp2p = require('../../src')
|
||||
const Upgrader = require('../../src/upgrader')
|
||||
const { codes } = require('../../src/errors')
|
||||
|
||||
const { mockConnectionGater } = require('../utils/mock-connection-gater')
|
||||
const mockMultiaddrConnPair = require('../utils/mockMultiaddrConn')
|
||||
const Peers = require('../fixtures/peers')
|
||||
const addrs = [
|
||||
@ -31,6 +31,17 @@ describe('Upgrader', () => {
|
||||
let remoteUpgrader
|
||||
let localPeer
|
||||
let remotePeer
|
||||
const connectionGater = mockConnectionGater()
|
||||
|
||||
const mockConnectionManager = {
|
||||
gater: {
|
||||
allowDialPeer: async () => true,
|
||||
allowDialMultiaddr: async () => true,
|
||||
acceptConnection: async () => true,
|
||||
acceptEncryptedConnection: async () => true,
|
||||
acceptUpgradedConnection: async () => true
|
||||
}
|
||||
}
|
||||
|
||||
before(async () => {
|
||||
([
|
||||
@ -42,10 +53,14 @@ describe('Upgrader', () => {
|
||||
]))
|
||||
|
||||
localUpgrader = new Upgrader({
|
||||
localPeer
|
||||
connectionManager: mockConnectionManager,
|
||||
localPeer,
|
||||
connectionGater
|
||||
})
|
||||
remoteUpgrader = new Upgrader({
|
||||
localPeer: remotePeer
|
||||
connectionManager: mockConnectionManager,
|
||||
localPeer: remotePeer,
|
||||
connectionGater
|
||||
})
|
||||
|
||||
localUpgrader.protocols.set('/echo/1.0.0', ({ stream }) => pipe(stream, stream))
|
||||
@ -321,6 +336,7 @@ describe('Upgrader', () => {
|
||||
describe('libp2p.upgrader', () => {
|
||||
let peers
|
||||
let libp2p
|
||||
const connectionGater = mockConnectionGater()
|
||||
|
||||
before(async () => {
|
||||
peers = await Promise.all([
|
||||
@ -392,8 +408,10 @@ describe('libp2p.upgrader', () => {
|
||||
|
||||
const remoteUpgrader = new Upgrader({
|
||||
localPeer: remotePeer,
|
||||
connectionManager: libp2p.connectionManager,
|
||||
muxers: new Map([[Muxer.multicodec, Muxer]]),
|
||||
cryptos: new Map([[Crypto.protocol, Crypto]])
|
||||
cryptos: new Map([[Crypto.protocol, Crypto]]),
|
||||
connectionGater
|
||||
})
|
||||
remoteUpgrader.protocols.set('/echo/1.0.0', echoHandler)
|
||||
|
||||
@ -424,8 +442,10 @@ describe('libp2p.upgrader', () => {
|
||||
|
||||
const remoteUpgrader = new Upgrader({
|
||||
localPeer: remotePeer,
|
||||
connectionManager: libp2p.connectionManager,
|
||||
muxers: new Map([[Muxer.multicodec, Muxer]]),
|
||||
cryptos: new Map([[Crypto.protocol, Crypto]])
|
||||
cryptos: new Map([[Crypto.protocol, Crypto]]),
|
||||
connectionGater
|
||||
})
|
||||
|
||||
const { inbound, outbound } = mockMultiaddrConnPair({ addrs, remotePeer })
|
||||
|
Reference in New Issue
Block a user