UNPKG

2.45 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const log_1 = require("../common/log");
4const log = log_1.create('echo');
5const ilp_packet_1 = require("ilp-packet");
6const oer_utils_1 = require("oer-utils");
7const config_1 = require("../services/config");
8const route_builder_1 = require("../services/route-builder");
9const { InvalidPacketError } = ilp_packet_1.Errors;
10const MINIMUM_ECHO_PACKET_DATA_LENGTH = 16 + 1;
11const ECHO_DATA_PREFIX = Buffer.from('ECHOECHOECHOECHO', 'ascii');
12class EchoController {
13 constructor(deps) {
14 this.config = deps(config_1.default);
15 this.routeBuilder = deps(route_builder_1.default);
16 }
17 async handle(data, sourceAccount, { parsedPacket, outbound }) {
18 if (parsedPacket.data.length < MINIMUM_ECHO_PACKET_DATA_LENGTH) {
19 throw new InvalidPacketError('packet data too short for echo request. length=' + parsedPacket.data.length);
20 }
21 if (!parsedPacket.data.slice(0, 16).equals(ECHO_DATA_PREFIX)) {
22 throw new InvalidPacketError('packet data does not start with ECHO prefix.');
23 }
24 const reader = new oer_utils_1.Reader(parsedPacket.data);
25 reader.skip(ECHO_DATA_PREFIX.length);
26 const type = reader.readUInt8Number();
27 if (type === 0) {
28 const sourceAddress = reader.readVarOctetString().toString('ascii');
29 log.trace('responding to ping. sourceAccount=%s sourceAddress=%s cond=%s', sourceAccount, sourceAddress, parsedPacket.executionCondition.slice(0, 9).toString('base64'));
30 const nextHop = this.routeBuilder.getNextHop(sourceAccount, sourceAddress);
31 const writer = new oer_utils_1.Writer();
32 writer.write(ECHO_DATA_PREFIX);
33 writer.writeUInt8(0x01);
34 return outbound(ilp_packet_1.serializeIlpPrepare({
35 amount: parsedPacket.amount,
36 destination: sourceAddress,
37 executionCondition: parsedPacket.executionCondition,
38 expiresAt: new Date(Number(parsedPacket.expiresAt) - this.config.minMessageWindow),
39 data: writer.getBuffer()
40 }), nextHop);
41 }
42 else {
43 log.error('received unexpected ping response. sourceAccount=%s', sourceAccount);
44 throw new InvalidPacketError('unexpected ping response.');
45 }
46 }
47}
48exports.default = EchoController;
49//# sourceMappingURL=echo.js.map
\No newline at end of file