openbrawl-client/Protocol/Messages/ClientHelloMessage.js
2025-06-21 00:41:45 +03:00

62 lines
1.3 KiB
JavaScript

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