From 962124f86a236af7d6acc41766ed6c0f86cf4956 Mon Sep 17 00:00:00 2001 From: Moshe Shababo Date: Wed, 26 Dec 2018 21:53:55 +0200 Subject: [PATCH] fix(p2p): order invalidation packet (#774) * return proper packet type * test to assert packet type * log/penalize data integrity error (taken from #756) --- lib/p2p/NodeList.ts | 1 + lib/p2p/Peer.ts | 4 ++++ lib/p2p/packets/types/OrderInvalidationPacket.ts | 4 ++-- lib/types/enums.ts | 1 + test/unit/Parser.spec.ts | 3 ++- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/p2p/NodeList.ts b/lib/p2p/NodeList.ts index 666bdf824..fe9279ae4 100644 --- a/lib/p2p/NodeList.ts +++ b/lib/p2p/NodeList.ts @@ -14,6 +14,7 @@ export const reputationEventWeight = { [ReputationEvent.SwapSuccess]: 1, [ReputationEvent.InvalidPacket]: -10, [ReputationEvent.UnknownPacketType]: -20, + [ReputationEvent.PacketDataIntegrityError]: -20, [ReputationEvent.MaxParserBufferSizeExceeded]: -20, }; diff --git a/lib/p2p/Peer.ts b/lib/p2p/Peer.ts index 71c2bc69b..32ae1484e 100644 --- a/lib/p2p/Peer.ts +++ b/lib/p2p/Peer.ts @@ -498,6 +498,10 @@ class Peer extends EventEmitter { this.logger.warn(`parser: unknown peer packet type: ${err.payload}`); this.emit('reputation', ReputationEvent.UnknownPacketType); break; + case ParserErrorType.DataIntegrityError: + this.logger.warn(`parser: packet data integrity error: ${err.payload}`); + this.emit('reputation', ReputationEvent.PacketDataIntegrityError); + break; case ParserErrorType.MaxBufferSizeExceeded: this.logger.warn(`parser: max buffer size exceeded: ${err.payload}`); this.emit('reputation', ReputationEvent.MaxParserBufferSizeExceeded); diff --git a/lib/p2p/packets/types/OrderInvalidationPacket.ts b/lib/p2p/packets/types/OrderInvalidationPacket.ts index 35d8d5c54..5e23e77c9 100644 --- a/lib/p2p/packets/types/OrderInvalidationPacket.ts +++ b/lib/p2p/packets/types/OrderInvalidationPacket.ts @@ -29,8 +29,8 @@ class OrderInvalidationPacket extends Packet { ); } - private static convert = (obj: pb.OrderInvalidationPacket.AsObject): OrderPacket => { - return new OrderPacket({ + private static convert = (obj: pb.OrderInvalidationPacket.AsObject): OrderInvalidationPacket => { + return new OrderInvalidationPacket({ header: { id: obj.id, hash: obj.hash, diff --git a/lib/types/enums.ts b/lib/types/enums.ts index 22585e14d..b1c7aa41d 100644 --- a/lib/types/enums.ts +++ b/lib/types/enums.ts @@ -60,6 +60,7 @@ export enum ReputationEvent { MaxParserBufferSizeExceeded = 5, InvalidPacket = 6, UnknownPacketType = 7, + PacketDataIntegrityError = 8, } export enum SwapFailureReason { diff --git a/test/unit/Parser.spec.ts b/test/unit/Parser.spec.ts index 70da615af..f99fcb1d2 100644 --- a/test/unit/Parser.spec.ts +++ b/test/unit/Parser.spec.ts @@ -36,8 +36,9 @@ describe('Parser', () => { return new Promise((resolve, reject) => { wait(packets.length) .then((parsedPackets) => { - for (let i = 0; i <= packets.length; i += 1) { + for (let i = 0; i < packets.length; i += 1) { expect(packets[i]).to.deep.equal(parsedPackets[i]); + expect(packets[i].type).to.equal(parsedPackets[i].type); } resolve(); })