1 | import * as IlpPacket from 'ilp-packet'
|
2 | import IldcpHostController from './ildcp-host'
|
3 | import CcpController from './ccp'
|
4 | import reduct = require('reduct')
|
5 | const { InvalidPacketError } = IlpPacket.Errors
|
6 |
|
7 | const PEER_PROTOCOL_CONDITION = Buffer.from('Zmh6rfhivXdsj8GLjp+OIAiXFIVu4jOzkCpZHQ1fKSU=', 'base64')
|
8 |
|
9 | export 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 | }
|