62 lines
1.3 KiB
JavaScript
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
|