omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
113 lines • 9.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.publish = void 0;
const protocol = require("./protocol");
/* TODO: consider rewriting these functions using buffers instead
* of arrays
*/
/* Publish */
function publish(opts) {
opts = opts || {};
let dup = opts.dup ? protocol.DUP_MASK : 0;
let qos = opts.qos || 0;
let retain = opts.retain ? protocol.RETAIN_MASK : 0;
let topic = opts.topic;
let payload = opts.payload || Buffer.alloc(0);
let id = (typeof opts.messageId === 'undefined') ? randint() : opts.messageId;
let packet = { header: 0, payload: [] };
/* Check required fields */
if (typeof topic !== 'string' || topic.length <= 0)
return null;
/* if payload is a string, we'll convert it into a buffer */
if (typeof payload === 'string') {
payload = Buffer.from(payload);
}
/* accepting only a buffer for payload */
if (!Buffer.isBuffer(payload))
return null;
if (typeof qos !== 'number' || qos < 0 || qos > 2)
return null;
if (typeof id !== 'number' || id < 0 || id > 0xFFFF)
return null;
/* Generate header */
packet.header = protocol.codes.publish << protocol.CMD_SHIFT | dup | qos << protocol.QOS_SHIFT | retain;
/* Topic name */
packet.payload = packet.payload.concat(gen_string(topic));
/* Message ID */
if (qos > 0)
packet.payload = packet.payload.concat(gen_number(id));
let buf = Buffer.from([packet.header]
.concat(gen_length(packet.payload.length + payload.length))
.concat(packet.payload));
return Buffer.concat([buf, payload]);
}
exports.publish = publish;
/* Requires length be a number > 0 */
let gen_length = function (length) {
if (typeof length !== 'number')
return null;
if (length < 0)
return null;
let len = [];
let digit = 0;
do {
digit = length % 128 | 0;
length = length / 128 | 0;
if (length > 0) {
digit = digit | 0x80;
}
len.push(digit);
} while (length > 0);
return len;
};
let gen_string = function (str, without_length) {
if (arguments.length < 2)
without_length = false;
if (typeof str !== 'string')
return null;
if (typeof without_length !== 'boolean')
return null;
let nums = [];
let length = 0;
for (let i = 0; i < str.length; i++) {
let code = str.charCodeAt(i);
if (code < 128) {
nums.push(code);
++length;
}
else if (code < 2048) {
nums.push(192 + ((code >> 6)));
++length;
nums.push(128 + ((code) & 63));
++length;
}
else if (code < 65536) {
nums.push(224 + ((code >> 12)));
++length;
nums.push(128 + ((code >> 6) & 63));
++length;
nums.push(128 + ((code) & 63));
++length;
}
else if (code < 2097152) {
nums.push(240 + ((code >> 18)));
++length;
nums.push(128 + ((code >> 12) & 63));
++length;
nums.push(128 + ((code >> 6) & 63));
++length;
nums.push(128 + ((code) & 63));
++length;
}
else {
throw new Error('Can\'t encode character with code ' + code);
}
}
return without_length ? nums : gen_number(length).concat(nums);
};
let gen_number = function (num) {
let nums = [num >> 8, num & 0x00FF];
return nums;
};
let randint = function () { return Math.floor(Math.random() * 0xFFFF); };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29ubmVjdG9ycy9tcXR0L2dlbmVyYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUF1QztBQUd2Qzs7R0FFRztBQUVILGFBQWE7QUFDYixTQUFnQixPQUFPLENBQUMsSUFBUztJQUM3QixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdkIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM5RSxJQUFJLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQVcsRUFBRSxDQUFDO0lBRWpELDJCQUEyQjtJQUMzQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNoRSw0REFBNEQ7SUFDNUQsSUFBSSxPQUFPLE9BQU8s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