UNPKG

knxultimate

Version:

KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.

67 lines 2.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const KNXConstants_1 = require("./KNXConstants"); const KNXPacket_1 = __importDefault(require("./KNXPacket")); const HPAI_1 = __importDefault(require("./HPAI")); const DeviceInfo_1 = __importDefault(require("./DeviceInfo")); const ServiceFamilies_1 = __importDefault(require("./ServiceFamilies")); class KNXSecureSearchResponse extends KNXPacket_1.default { constructor(hpai, deviceInfo, serviceFamilies, securedServiceFamilies) { super(KNXConstants_1.KNX_CONSTANTS.SEARCH_RESPONSE_EXTENDED, hpai.length + (deviceInfo?.length ?? 0) + (serviceFamilies?.length ?? 0) + (securedServiceFamilies?.length ?? 0)); this.hpai = hpai; this.deviceInfo = deviceInfo; this.serviceFamilies = serviceFamilies; this.securedServiceFamilies = securedServiceFamilies; } static createFromBuffer(buffer, offset = 0) { const hpai = HPAI_1.default.createFromBuffer(buffer, offset); offset += hpai.length; let deviceInfo; let families; let secFamilies; while (offset + 2 <= buffer.length) { const len = buffer.readUInt8(offset); if (len < 2 || offset + len > buffer.length) break; const type = buffer.readUInt8(offset + 1); switch (type) { case KNXConstants_1.KNX_CONSTANTS.DEVICE_INFO: deviceInfo = DeviceInfo_1.default.createFromBuffer(buffer, offset); offset += deviceInfo.length; break; case KNXConstants_1.KNX_CONSTANTS.SUPP_SVC_FAMILIES: families = ServiceFamilies_1.default.createFromBuffer(buffer, offset); offset += families.length; break; case KNXConstants_1.KNX_CONSTANTS.SECURED_SERVICE_FAMILIES: secFamilies = ServiceFamilies_1.default.createFromBuffer(buffer, offset); offset += secFamilies.length; break; default: offset += len; } } return new KNXSecureSearchResponse(hpai, deviceInfo, families, secFamilies); } toBuffer() { const parts = [this.header.toBuffer(), this.hpai.toBuffer()]; if (this.deviceInfo) parts.push(this.deviceInfo.toBuffer()); if (this.serviceFamilies) parts.push(this.serviceFamilies.toBuffer()); if (this.securedServiceFamilies) parts.push(this.securedServiceFamilies.toBuffer()); return Buffer.concat(parts); } get hasSecurity() { return !!this.securedServiceFamilies; } } exports.default = KNXSecureSearchResponse; //# sourceMappingURL=KNXSecureSearchResponse.js.map