@homebridge/ciao
Version:
ciao is a RFC 6763 compliant dns-sd library, advertising on multicast dns (RFC 6762) implemented in plain Typescript/JavaScript
63 lines • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TruncatedQuery = exports.TruncatedQueryEvent = exports.TruncatedQueryResult = void 0;
/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */
const events_1 = require("events");
var TruncatedQueryResult;
(function (TruncatedQueryResult) {
TruncatedQueryResult[TruncatedQueryResult["ABORT"] = 1] = "ABORT";
TruncatedQueryResult[TruncatedQueryResult["AGAIN_TRUNCATED"] = 2] = "AGAIN_TRUNCATED";
TruncatedQueryResult[TruncatedQueryResult["FINISHED"] = 3] = "FINISHED";
})(TruncatedQueryResult || (exports.TruncatedQueryResult = TruncatedQueryResult = {}));
var TruncatedQueryEvent;
(function (TruncatedQueryEvent) {
TruncatedQueryEvent["TIMEOUT"] = "timeout";
})(TruncatedQueryEvent || (exports.TruncatedQueryEvent = TruncatedQueryEvent = {}));
class TruncatedQuery extends events_1.EventEmitter {
constructor(packet) {
super();
this.arrivedPackets = 1; // just for the stats
this.timeOfArrival = new Date().getTime();
this.packet = packet;
this.timer = this.resetTimer();
}
getPacket() {
return this.packet;
}
getArrivedPacketCount() {
return this.arrivedPackets;
}
getTotalWaitTime() {
return new Date().getTime() - this.timeOfArrival;
}
appendDNSPacket(packet) {
this.packet.combineWith(packet);
this.arrivedPackets++;
if (packet.flags.truncation) { // if the appended packet is again truncated, restart the timeout
const time = new Date().getTime();
if (time - this.timeOfArrival > 5 * 1000) { // if the first packet, is more than 5 seconds old, we abort
return 1 /* TruncatedQueryResult.ABORT */;
}
this.resetTimer();
return 2 /* TruncatedQueryResult.AGAIN_TRUNCATED */;
}
else {
clearTimeout(this.timer);
this.removeAllListeners();
return 3 /* TruncatedQueryResult.FINISHED */;
}
}
resetTimer() {
if (this.timer) {
clearTimeout(this.timer);
}
// timeout in time interval between 400-500ms
return this.timer = setTimeout(this.timeout.bind(this), 400 + Math.random() * 100);
}
timeout() {
this.emit("timeout" /* TruncatedQueryEvent.TIMEOUT */);
this.removeAllListeners();
}
}
exports.TruncatedQuery = TruncatedQuery;
//# sourceMappingURL=TruncatedQuery.js.map