Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 35x 35x 35x 35x 512x 512x 512x 4x 177x 177x 177x 177x 1x 176x 176x 34x 34x 34x 142x 142x 142x | /* * Copyright © 2019 Lisk Foundation * * See the LICENSE file at the top-level directory of this distribution * for licensing information. * * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation, * no part of this software, including this file, may be copied, modified, * propagated, or distributed except according to the terms contained in the * LICENSE file. * * Removal or modification of this copyright notice is prohibited. * */ import { DEFAULT_MAX_RECONNECT_TRIES } from '../constants'; import { P2PPeerInfo } from '../p2p_types'; import { PEER_TYPE } from '../utils'; import { BaseList, PeerListConfig } from './base_list'; export interface TriedListConfig extends PeerListConfig { readonly maxReconnectTries?: number; } export class TriedList extends BaseList { private readonly _maxReconnectTries: number; public constructor({ numOfBuckets, bucketSize, maxReconnectTries, secret, peerType, }: TriedListConfig) { super({ secret, numOfBuckets, bucketSize, peerType, }); this.type = PEER_TYPE.TRIED_PEER; this._maxReconnectTries = maxReconnectTries ? maxReconnectTries : DEFAULT_MAX_RECONNECT_TRIES; } public get triedPeerConfig(): TriedListConfig { return { ...this.peerListConfig, maxReconnectTries: this._maxReconnectTries, }; } public failedConnectionAction(incomingPeerInfo: P2PPeerInfo): boolean { // Bucket calculation does not require sourceAddress and is deterministic const { bucket } = this.calculateBucket(incomingPeerInfo.ipAddress); const incomingPeerId = incomingPeerInfo.peerId; const foundPeer = bucket.get(incomingPeerId); if (!foundPeer) { return false; } const { numOfConnectionFailures } = foundPeer; if ((numOfConnectionFailures as number) + 1 >= this._maxReconnectTries) { const removedFromBucket = bucket.delete(incomingPeerId); const removedFromPeerLookup = this.peerIdToPeerInfo.delete( incomingPeerId, ); return removedFromBucket && removedFromPeerLookup; } const updatedTriedPeerInfo = { ...foundPeer, numOfConnectionFailures: (numOfConnectionFailures as number) + 1, }; bucket.set(incomingPeerId, updatedTriedPeerInfo); return false; } } |