UNPKG

1.24 kBPlain TextView Raw
1import * as IlpPacket from 'ilp-packet'
2import IldcpHostController from './ildcp-host'
3import CcpController from './ccp'
4import reduct = require('reduct')
5const { InvalidPacketError } = IlpPacket.Errors
6
7const PEER_PROTOCOL_CONDITION = Buffer.from('Zmh6rfhivXdsj8GLjp+OIAiXFIVu4jOzkCpZHQ1fKSU=', 'base64')
8
9export default class PeerProtocolController {
10 private ildcpHostController: IldcpHostController
11 private ccpController: CcpController
12
13 constructor (deps: reduct.Injector) {
14 this.ildcpHostController = deps(IldcpHostController)
15 this.ccpController = deps(CcpController)
16 }
17
18 async handle (
19 data: Buffer,
20 sourceAccount: string,
21 { parsedPacket }: { parsedPacket: IlpPacket.IlpPrepare }
22 ) {
23 if (!PEER_PROTOCOL_CONDITION.equals(parsedPacket.executionCondition)) {
24 throw new InvalidPacketError('condition must be peer protocol condition.')
25 }
26
27 if (parsedPacket.destination === 'peer.config') {
28 return this.ildcpHostController.handle(data, sourceAccount)
29 } else if (parsedPacket.destination.startsWith('peer.route')) {
30 return this.ccpController.handle(data, sourceAccount, { parsedPacket })
31 } else {
32 throw new InvalidPacketError('unknown peer protocol.')
33 }
34 }
35}