diff --git a/app/lib/common-libs/constants.ts b/app/lib/common-libs/constants.ts index f9cda71f7a61d29af6075eeb98a09c2b9264a49b..f49c1fb3f1af6c89f0c47bf04b4c586747b5705f 100644 --- a/app/lib/common-libs/constants.ts +++ b/app/lib/common-libs/constants.ts @@ -32,8 +32,8 @@ const CONDITIONS = "(&&|\\|\\|| |[()]|(SIG\\(" + PUBKEY + "\\)|(XHX\\([A-F0-9] const BMA_REGEXP = /^BASIC_MERKLED_API( ([a-z_][a-z0-9-_.]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))$/ const BMATOR_REGEXP = /^BMATOR( ([a-z0-9]{16})\.onion)( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))$/ -const WS2P_REGEXP = /^WS2P ([a-f0-9]{8}) ([a-z_][a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+) ([0-9]+)(?: (.+))?$/ -const WS2PTOR_REGEXP = /^WS2PTOR ([a-f0-9]{8}) ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion) ([0-9]+)(?: (.+))?$/ +const WS2P_REGEXP = /^WS2P (?:[1-9][0-9]* )?([a-f0-9]{8}) ([a-z_][a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+) ([0-9]+)(?: (.+))?$/ +const WS2PTOR_REGEXP = /^WS2PTOR (?:[1-9][0-9]* )?([a-f0-9]{8}) ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion) ([0-9]+)(?: (.+))?$/ const WS_FULL_ADDRESS_ONION_REGEX = /^(?:wss?:\/\/)(?:www\.)?([0-9a-z]{16}\.onion)(:[0-9]+)?$/ const IPV4_REGEXP = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; const IPV6_REGEXP = /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|(([0-9A-Fa-f]{1,4}:){0,5}:((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|(::([0-9A-Fa-f]{1,4}:){0,5}((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/; diff --git a/app/modules/ws2p/lib/WS2PCluster.ts b/app/modules/ws2p/lib/WS2PCluster.ts index f41ad9cb297093ab957e04d9a4e6652266a79e27..efd69b63beab3c42afa4931d281455b617410093 100644 --- a/app/modules/ws2p/lib/WS2PCluster.ts +++ b/app/modules/ws2p/lib/WS2PCluster.ts @@ -25,6 +25,11 @@ const _ = require('underscore') export interface WS2PHead { message:string sig:string + step?:number +} + +export interface WS2pHeadCache extends WS2PHead { + blockstamp:string } export class WS2PCluster { @@ -69,11 +74,11 @@ export class WS2PCluster { // A cache to know wether a pubkey is a member or not private memberkeysCache:{ [k:string]: number } = {} - // A cache of the current HEAD for a given pubkey - private headsCache:{ [ws2pFullId:string]: { blockstamp:string, message:string, sig:string } } = {} + // A cache of the current HEAD for a given ws2pFullId + private headsCache:{ [ws2pFullId:string]:WS2pHeadCache } = {} // A buffer of "to be sent" heads - private newHeads:{ message:string, sig:string }[] = [] + private newHeads:WS2PHead[] = [] // The triggerer of a buffer of heads' sending private headsTimeout:NodeJS.Timer|null = null @@ -111,10 +116,11 @@ export class WS2PCluster { return heads } - async headsReceived(heads:[{ message:string, sig:string }]) { - const added:{ message:string, sig:string }[] = [] - await Promise.all(heads.map(async (h:{ message:string, sig:string }) => { + async headsReceived(heads:WS2PHead[]) { + const added:WS2PHead[] = [] + await Promise.all(heads.map(async (h:WS2PHead) => { try { + const step = (h.step !== undefined) ? h.step:undefined const message = h.message const sig = h.sig if (!message) { diff --git a/app/modules/ws2p/lib/constants.ts b/app/modules/ws2p/lib/constants.ts index 5336add6a7a70e38b326fda13fa5e897ec96083c..bea7664e8be4f202675c17e912273ee0feff9001 100644 --- a/app/modules/ws2p/lib/constants.ts +++ b/app/modules/ws2p/lib/constants.ts @@ -37,6 +37,7 @@ export const WS2PConstants = { + '(' + CommonConstants.FORMATS.SOFTWARE + '):' + '(' + CommonConstants.FORMATS.SOFT_VERSION + '):' + '(' + CommonConstants.FORMATS.POW_PREFIX + ')' + + '(?::' + CommonConstants.FORMATS.TIMESTAMP + ')?' + '$'), HOST_ONION_REGEX: CommonConstants.HOST_ONION_REGEX,