UNPKG

@homebridge/ciao

Version:

ciao is a RFC 6763 compliant dns-sd library, advertising on multicast dns (RFC 6762) implemented in plain Typescript/JavaScript

62 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Question = void 0; const dns_equal_1 = require("../util/dns-equal"); class Question { constructor(name, type, unicastResponseFlag = false, clazz = 1 /* QClass.IN */) { this.unicastResponseFlag = false; if (!name.endsWith(".")) { name += "."; } this.name = name; this.type = type; this.class = clazz; this.unicastResponseFlag = unicastResponseFlag; } getLowerCasedName() { return this.lowerCasedName || (this.lowerCasedName = (0, dns_equal_1.dnsLowerCase)(this.name)); } getEncodingLength(coder) { return coder.getNameLength(this.name) + 4; // 2 bytes type; 2 bytes class } encode(coder, buffer, offset) { const oldOffset = offset; const nameLength = coder.encodeName(this.name, offset); offset += nameLength; buffer.writeUInt16BE(this.type, offset); offset += 2; let qClass = this.class; if (this.unicastResponseFlag) { qClass |= Question.QU_MASK; } buffer.writeUInt16BE(qClass, offset); offset += 2; return offset - oldOffset; // written bytes } clone() { return new Question(this.name, this.type, this.unicastResponseFlag, this.class); } asString() { return `Q ${this.name} ${this.type} ${this.class}`; } static decode(context, coder, buffer, offset) { const oldOffset = offset; const decodedName = coder.decodeName(offset); offset += decodedName.readBytes; const type = buffer.readUInt16BE(offset); offset += 2; const qClass = buffer.readUInt16BE(offset); offset += 2; const clazz = (qClass & this.NOT_QU_MASK); const quFlag = !!(qClass & this.QU_MASK); const question = new Question(decodedName.data, type, quFlag, clazz); return { data: question, readBytes: offset - oldOffset, }; } } exports.Question = Question; Question.QU_MASK = 0x8000; // 2 bytes, first bit set Question.NOT_QU_MASK = 0x7FFF; //# sourceMappingURL=Question.js.map