UNPKG

@esutils/dns-packet

Version:

A minimal dns-packet library that implemented in `typescript`

58 lines 1.63 kB
/* eslint-disable no-bitwise */ function p(a) { let n = 0; const f = a.length - 1; for (let i = f; i >= 0; i -= 1) { if (a[f - i]) n += 2 ** i; } return n; } /** * [Reader description] * @param {[type]} buffer [description] * @param {[type]} offset [description] */ export class BufferReader { buffer; offset; constructor(buffer, offset) { this.buffer = buffer; this.offset = offset || 0; } /** * [read description] * @param {[type]} buffer [description] * @param {[type]} offset [description] * @param {[type]} length [description] * @return {[type]} [description] */ static read(buffer, offset, length) { let a = []; let c = Math.ceil(length / 8); let l = Math.floor(offset / 8); const m = offset % 8; function t(n) { const r = [0, 0, 0, 0, 0, 0, 0, 0]; for (let i = 7; i >= 0; i -= 1) { r[7 - i] = n & 2 ** i ? 1 : 0; } a = a.concat(r); } const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); while (c--) t(view.getUint8(l++)); return p(a.slice(m, m + length)); } /** * [read description] * @param {[type]} size [description] * @return {[type]} [description] */ read(size) { const val = BufferReader.read(this.buffer, this.offset, size); this.offset += size; return val; } } //# sourceMappingURL=reader.js.map