smppjs
Version:
Modern approach to smpp protocol.
56 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cstring = void 0;
class Cstring {
static write({ buffer, value, offset, encoding = 'ascii', setLength = false, }) {
const newBuffer = buffer;
let valueBuffer;
if (typeof value === 'string') {
valueBuffer = Buffer.from(value, encoding);
}
else {
valueBuffer = value;
}
if (setLength) {
buffer.writeUInt8(valueBuffer.length, offset++);
}
valueBuffer.copy(buffer, offset);
newBuffer[offset + valueBuffer.length] = 0;
return newBuffer;
}
static size(value) {
if (typeof value === 'number') {
return value.toString().length + 1;
}
return value.length + 1;
}
static read({ buffer, offset, encoding = 'ascii', length }) {
if (length && length > 0) {
return buffer.toString(encoding, offset, offset + length);
}
const MAX_SCAN = 16;
let scanLength = 0;
while (scanLength < MAX_SCAN && offset + scanLength < buffer.length && buffer[offset + scanLength]) {
scanLength++;
}
if (scanLength < MAX_SCAN || offset + scanLength >= buffer.length) {
return buffer.toString(encoding, offset, offset + scanLength);
}
const nullIndex = buffer.indexOf(0, offset);
const endIndex = nullIndex === -1 ? buffer.length : nullIndex;
return buffer.toString(encoding, offset, endIndex);
}
static convertToUtf16be(value) {
if (typeof value === 'string') {
value = Buffer.from(value, 'ucs2');
}
const utf16beBuffer = Buffer.alloc(value.length);
for (let i = 0; i < value.length; i += 2) {
utf16beBuffer[i] = value[i + 1];
utf16beBuffer[i + 1] = value[i];
}
return utf16beBuffer;
}
}
exports.Cstring = Cstring;
//# sourceMappingURL=cstring.js.map