@tgsnake/core
Version:
Pure Telegram MTProto library for nodejs
44 lines (43 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TCPFull = void 0;
const platform_node_js_1 = require("../../platform.node.js");
const tcp_js_1 = require("./tcp.js");
const helpers_js_1 = require("../../helpers.js");
class TCPFull extends tcp_js_1.TCP {
_seq;
constructor() {
super();
}
async connect(ip, port, proxy, dcId) {
await super.connect(ip, port, proxy, dcId);
this._seq = 0;
}
async send(data) {
const allocSum = platform_node_js_1.Buffer.alloc(8);
allocSum.writeInt32LE(platform_node_js_1.Buffer.byteLength(data) + 12, 0);
allocSum.writeInt32LE(this._seq, 4);
data = platform_node_js_1.Buffer.concat([allocSum, data]);
const crc = (0, helpers_js_1.crc32)(data);
const bcrc = platform_node_js_1.Buffer.alloc(4);
bcrc.writeUInt32LE(crc, 0);
data = platform_node_js_1.Buffer.concat([data, bcrc]);
this._seq += 1;
await super.send(data);
}
async recv(_length = 0) {
const length = await super.recv(4);
if (!length)
return;
let packet = await super.recv(length.readInt32LE(0) - 4);
if (!packet)
return;
packet = platform_node_js_1.Buffer.concat([length, packet]);
const checksum = packet.subarray(-4);
packet = packet.subarray(0, -4);
if ((0, helpers_js_1.crc32)(packet) !== checksum.readUInt32LE(0))
return;
return packet.subarray(8);
}
}
exports.TCPFull = TCPFull;