@tgsnake/core
Version:
Pure Telegram MTProto library for nodejs
48 lines (47 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TCPAbridged = 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 TCPAbridged extends tcp_js_1.TCP {
constructor() {
super();
}
async connect(ip, port, proxy, dcId) {
await super.connect(ip, port, proxy, dcId);
return await super.send(platform_node_js_1.Buffer.from('ef', 'hex'));
}
async send(data) {
const length = Math.round(platform_node_js_1.Buffer.byteLength(data) / 4);
if (length <= 126) {
const mark = platform_node_js_1.Buffer.from([length]);
return await super.send(platform_node_js_1.Buffer.concat([mark, data]));
}
else {
return await super.send(platform_node_js_1.Buffer.concat([
platform_node_js_1.Buffer.concat([
platform_node_js_1.Buffer.from('7f', 'hex'),
(0, helpers_js_1.bigintToBuffer)(BigInt(length), 3),
]),
data,
]));
}
}
async recv(_length = 0) {
let length = await super.recv(1);
if (!length)
return;
if (length.equals(platform_node_js_1.Buffer.from('7f', 'hex'))) {
length = await super.recv(3);
if (!length)
return;
return await super.recv(platform_node_js_1.Buffer.concat([
length,
platform_node_js_1.Buffer.alloc(1),
]).readInt32LE(0) * 4);
}
return await super.recv(length[0] * 4);
}
}
exports.TCPAbridged = TCPAbridged;