Skip to content

Commit 208409a

Browse files
authored
Implement in other custom transports (#713)
1 parent 7e8fee3 commit 208409a

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

packages/portalnetwork/src/client/client.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class PortalNetwork extends EventEmitter<PortalNetworkEvents> {
127127
switch (opts.transport) {
128128
case TransportLayer.WEB: {
129129
opts.proxyAddress = opts.proxyAddress ?? 'ws://127.0.0.1:5050'
130-
config.transport = new WebSocketTransportService(ma, config.enr.nodeId, opts.proxyAddress)
130+
config.transport = new WebSocketTransportService(ma, config.enr.nodeId, opts.proxyAddress, new RateLimiter())
131131
break
132132
}
133133
case TransportLayer.MOBILE:
@@ -478,19 +478,19 @@ export class PortalNetwork extends EventEmitter<PortalNetworkEvents> {
478478

479479
public addToBlackList = (ma: Multiaddr) => {
480480
(<RateLimiter>(
481-
(<UDPTransportService>this.discv5.sessionService.transport)['rateLimiter']
481+
(<any>this.discv5.sessionService.transport)['rateLimiter']
482482
)).addToBlackList(ma.nodeAddress().address)
483483
}
484484

485485
public isBlackListed = (ma: Multiaddr) => {
486486
return (<RateLimiter>(
487-
(<UDPTransportService>this.discv5.sessionService.transport)['rateLimiter']
487+
(<any>this.discv5.sessionService.transport)['rateLimiter']
488488
)).isBlackListed(ma.nodeAddress().address)
489489
}
490490

491491
public removeFromBlackList = (ma: Multiaddr) => {
492492
(<RateLimiter>(
493-
(<UDPTransportService>this.discv5.sessionService.transport)['rateLimiter']
493+
(<any>this.discv5.sessionService.transport)['rateLimiter']
494494
)).removeFromBlackList(ma.nodeAddress().address)
495495
}
496496
}

packages/portalnetwork/src/transports/capacitorUdp.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { decodePacket, encodePacket } from '@chainsafe/discv5/packet'
44
import { UDP } from '@frontall/capacitor-udp'
55
import { multiaddr as ma } from '@multiformats/multiaddr'
66

7+
import type { IRateLimiter } from './rateLimiter.js'
78
import type { SocketAddress } from '@chainsafe/discv5'
89
import type { IPacket } from '@chainsafe/discv5/packet'
910
import type {
@@ -33,11 +34,13 @@ export class CapacitorUDPTransportService
3334
ip4: true,
3435
ip6: false,
3536
}
36-
public constructor(multiaddr: Multiaddr, srcId: string) {
37+
private rateLimiter?: IRateLimiter
38+
public constructor(multiaddr: Multiaddr, srcId: string, rateLimiter?: IRateLimiter) {
3739
//eslint-disable-next-line constructor-super
3840
super()
3941
this.bindAddrs = [multiaddr]
4042
this.srcId = srcId
43+
this.rateLimiter = rateLimiter
4144
}
4245

4346
public async start(): Promise<void> {
@@ -74,6 +77,9 @@ export class CapacitorUDPTransportService
7477
}
7578

7679
public handleIncoming = (data: Uint8Array, rinfo: IRemoteInfo): void => {
80+
if (this.rateLimiter && !this.rateLimiter.allowEncodedPacket(rinfo.address)) {
81+
return
82+
}
7783
const multiaddr = ma(
7884
`/${rinfo.family === 'IPv4' ? 'ip4' : 'ip6'}/${rinfo.address}/udp/${rinfo.port}`,
7985
)

packages/portalnetwork/src/transports/websockets.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import type { ENR } from '@chainsafe/enr'
1818
import type { Multiaddr } from '@multiformats/multiaddr'
1919
import type { Debugger } from 'debug'
2020
import type StrictEventEmitter from 'strict-event-emitter-types/types/src'
21-
21+
import type { IRateLimiter } from './rateLimiter.js'
2222
const log = debug('discv5:transport')
2323

2424
interface WebSocketTransportEvents extends ITransportEvents {
@@ -40,12 +40,13 @@ export class WebSocketTransportService
4040
private socket: WebSocketAsPromised
4141
private srcId: string
4242
private log: Debugger
43+
private rateLimiter?: IRateLimiter
4344
ipMode: IPMode = {
4445
ip4: true,
4546
ip6: false,
4647
}
4748
bindAddrs: Multiaddr[] = []
48-
public constructor(multiaddr: Multiaddr, srcId: string, proxyAddress: string) {
49+
public constructor(multiaddr: Multiaddr, srcId: string, proxyAddress: string, rateLimiter?: IRateLimiter) {
4950
//eslint-disable-next-line constructor-super
5051
super()
5152
this.log = debug('Portal').extend('WebSocketTransportService')
@@ -58,6 +59,7 @@ export class WebSocketTransportService
5859
createWebSocket: (url) => new WebSocket(url),
5960
extractMessageData: (event) => event,
6061
})
62+
this.rateLimiter = rateLimiter
6163
}
6264

6365
public async start(): Promise<void> {
@@ -108,6 +110,9 @@ export class WebSocketTransportService
108110
const rinfo = JSON.parse(
109111
new TextDecoder().decode(data.slice(2, rinfoLength + 2)),
110112
) as IRemoteInfo
113+
if (this.rateLimiter && !this.rateLimiter.allowEncodedPacket(rinfo.address)) {
114+
return;
115+
}
111116
const multiaddr = ma(
112117
`/${rinfo.family === 'IPv4' ? 'ip4' : 'ip6'}/${rinfo.address}/udp/${rinfo.port}`,
113118
)

0 commit comments

Comments
 (0)