const ByteStream = require("../../ByteStream/ByteStream") class ClientHelloMessage { constructor(config, crypto, logger, data = null) { this.config = config this.crypto = crypto this.logger = logger this.type = 10100 this.data = data } encode() { const stream = new ByteStream() // Protocol version stream.writeUInt32(1) stream.writeUInt32(this.config.client.version.major) stream.writeUInt32(this.config.client.version.major) stream.writeUInt32(this.config.client.version.minor) stream.writeUInt32(this.config.client.version.build) stream.writeString("") const nonce = this.crypto.generateNonce() stream.writeBytes(nonce) this.logger.debug(`Encoding ClientHelloMessage`, { version: this.config.client.version, nonceLength: nonce.length, }) return stream.getBuffer() } decode(buffer) { const stream = new ByteStream(buffer) const data = { protocolVersion: stream.readUInt32(), keyVersion: stream.readUInt32(), majorVersion: stream.readUInt32(), minorVersion: stream.readUInt32(), buildVersion: stream.readUInt32(), hash: stream.readString(), } this.logger.debug(`Decoded ClientHelloMessage`, data) return data } getType() { return this.type } } module.exports = ClientHelloMessage