krtp
Version:
Node implementation of rdp protocol. RFC 3550
79 lines (78 loc) • 2.86 kB
JavaScript
"use strict";
/*
* +===============================================
* | Author: Parham Alvani (parham.alvani@gmail.com)
* |
* | Creation Date: 01-06-2017
* |
* | File Name: packet.ts
* +===============================================
*/
/**
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Packet = void 0;
var Packet = /** @class */ (function () {
function Packet(payload, sequenceNumber, ssrc, timestamp, payloadType) {
if (timestamp === void 0) { timestamp = 0; }
if (payloadType === void 0) { payloadType = 95; }
this.csrc = [];
this.payload = payload;
this.sequenceNumber = sequenceNumber;
this.ssrc = ssrc;
this.timestamp = timestamp;
this.payloadType = payloadType;
}
Packet.prototype.addCSRC = function (csrc) {
/* TODO: csrc must be a 32 bit integer */
this.csrc.push(csrc);
};
Packet.prototype.serialize = function () {
var buff = Buffer.alloc(12 + 4 * this.csrc.length + this.payload.length);
/* buff[0] = (V << 6 | P << 5 | X << 4 | CC) */
buff[0] = (2 << 6) | (0 << 5) | (0 << 4) | this.csrc.length;
/* buff[1] = (M << 7 | PT) */
buff[1] = (0 << 7) | this.payloadType;
/* buff[2, 3] = SN */
buff.writeUInt16BE(this.sequenceNumber, 2);
/* buff[4, 5, 6, 7] = TS */
buff.writeUInt32BE(this.timestamp, 4);
/* buff[8, 9, 10, 11] = SSRC */
buff.writeUInt32BE(this.ssrc, 8);
/* CSRC section */
for (var i = 0; i < this.csrc.length; i++) {
buff.writeUInt32BE(this.csrc[i], 12 + i * 4);
}
this.payload.copy(buff, 12 + this.csrc.length * 4, 0);
return buff;
};
Packet.deserialize = function (buff) {
var csrc = [];
/* buff[0] = (V << 6 | P << 5 | X << 4 | CC) */
if ((buff[0] & 0xc0) >> 6 !== 2) {
throw new Error("invalid rtp packet " + (buff[0] & 0xc0));
}
var cc = buff[0] & 0x1f;
/* buff[1] = (M << 7 | PT) */
var payloadType = buff[1] & 0x7f;
/* buff[2, 3] = SN */
var sequenceNumber = buff.readUInt16BE(2);
/* buff[4, 5, 6, 7] = TS */
var timestamp = buff.readUInt32BE(4);
/* buff[8, 9, 10, 11] = SSRC */
var ssrc = buff.readUInt32BE(8);
/* CSRC section */
for (var i = 0; i < cc; i++) {
csrc.push(buff.readUInt32BE(12 + i * 4));
}
var payload = Buffer.from(buff.slice(12 + csrc.length * 4));
var packet = new Packet(payload, sequenceNumber, ssrc, timestamp, payloadType);
for (var _i = 0, csrc_1 = csrc; _i < csrc_1.length; _i++) {
var s = csrc_1[_i];
packet.addCSRC(s);
}
return packet;
};
return Packet;
}());
exports.Packet = Packet;