From bc71013fc588105d27fa86ffa32742e40be582bd Mon Sep 17 00:00:00 2001 From: air1one <36802613+air1one@users.noreply.github.com> Date: Fri, 20 Dec 2019 15:58:37 +0400 Subject: [PATCH] fix(core-p2p): master merge fixes for core-p2p worker (#3359) --- packages/core-p2p/src/socket-server/worker.ts | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/packages/core-p2p/src/socket-server/worker.ts b/packages/core-p2p/src/socket-server/worker.ts index 49e46ce980..c191f3a3a3 100644 --- a/packages/core-p2p/src/socket-server/worker.ts +++ b/packages/core-p2p/src/socket-server/worker.ts @@ -2,7 +2,6 @@ import { P2P } from "@arkecosystem/core-interfaces"; import Ajv from "ajv"; import { cidr } from "ip"; import SCWorker from "socketcluster/scworker"; -import { RateLimiter } from "../rate-limiter"; import { requestSchemas } from "../schemas"; import { codec } from "../utils/sc-codec"; @@ -14,7 +13,6 @@ const ajv = new Ajv(); export class Worker extends SCWorker { private config: Record; private ipLastError: Record = {}; - private rateLimiter: RateLimiter; public async run() { this.log(`Socket worker started, PID: ${process.pid}`); @@ -29,8 +27,6 @@ export class Worker extends SCWorker { // @ts-ignore this.scServer.wsServer.on("connection", (ws, req) => { this.handlePayload(ws, req); - this.handlePing(ws, req); - this.handlePong(ws, req); }); this.scServer.on("connection", socket => this.handleConnection(socket)); this.scServer.addMiddleware(this.scServer.MIDDLEWARE_HANDSHAKE_WS, (req, next) => @@ -44,18 +40,6 @@ export class Worker extends SCWorker { this.config = data; } - private handlePing(ws, req) { - ws.on("ping", () => { - ws.terminate(); - }); - } - - private handlePong(ws, req) { - ws.on("pong", () => { - ws.terminate(); - }); - } - private handlePayload(ws, req) { ws.prependListener("ping", () => { this.setErrorForIpAndTerminate(ws, req); @@ -81,8 +65,7 @@ export class Worker extends SCWorker { const parsed = JSON.parse(message); if (parsed.event === "#disconnect") { ws._disconnected = true; - } - if ( + } else if ( typeof parsed.event !== "string" || typeof parsed.data !== "object" || (typeof parsed.cid !== "number" && @@ -126,9 +109,15 @@ export class Worker extends SCWorker { return; } - const isBlocked = await this.rateLimiter.isBlocked(ip); - const isBlacklisted = (this.config.blacklist || []).includes(ip); - if (isBlocked || isBlacklisted) { + const { data }: { data: { blocked: boolean } } = await this.sendToMasterAsync( + "p2p.internal.isBlockedByRateLimit", + { + data: { ip }, + }, + ); + + const isBlacklisted: boolean = (this.config.blacklist || []).includes(ip); + if (data.blocked || isBlacklisted) { req.socket.destroy(); return; }