UNPKG

@tgsnake/core

Version:

Pure Telegram MTProto library for nodejs

44 lines (43 loc) 1.56 kB
"use strict"; 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;