@@ -52,18 +52,22 @@ class PaymentInitiator(nodeParams: NodeParams, outgoingPaymentFactory: PaymentIn
5252 }
5353 val paymentCfg = SendPaymentConfig (paymentId, paymentId, r.externalId, r.paymentHash, r.recipientAmount, r.recipientNodeId, Upstream .Local (paymentId), Some (r.paymentRequest), storeInDb = true , publishEvent = true , recordPathFindingMetrics = true , Nil )
5454 val finalExpiry = r.finalExpiry(nodeParams.currentBlockHeight)
55- r.paymentRequest.paymentSecret match {
56- case _ if ! r.paymentRequest.features.areSupported(nodeParams) =>
57- sender() ! PaymentFailed (paymentId, r.paymentHash, LocalFailure (r.recipientAmount, Nil , UnsupportedFeatures (r.paymentRequest.features.features)) :: Nil )
58- case None =>
59- sender() ! PaymentFailed (paymentId, r.paymentHash, LocalFailure (r.recipientAmount, Nil , PaymentSecretMissing ) :: Nil )
60- case Some (paymentSecret) if r.paymentRequest.features.allowMultiPart && nodeParams.features.hasFeature(BasicMultiPartPayment ) =>
61- val fsm = outgoingPaymentFactory.spawnOutgoingMultiPartPayment(context, paymentCfg)
62- fsm ! SendMultiPartPayment (sender(), paymentSecret, r.recipientNodeId, r.recipientAmount, finalExpiry, r.maxAttempts, r.paymentRequest.paymentMetadata, r.assistedRoutes, r.routeParams, userCustomTlvs = r.userCustomTlvs)
63- case Some (paymentSecret) =>
64- val finalPayload = PaymentOnion .createSinglePartPayload(r.recipientAmount, finalExpiry, paymentSecret, r.paymentRequest.paymentMetadata, r.userCustomTlvs)
65- val fsm = outgoingPaymentFactory.spawnOutgoingPayment(context, paymentCfg)
66- fsm ! PaymentLifecycle .SendPaymentToNode (sender(), r.recipientNodeId, finalPayload, r.maxAttempts, r.assistedRoutes, r.routeParams)
55+ if (! r.paymentRequest.features.areSupported(nodeParams)) {
56+ sender() ! PaymentFailed (paymentId, r.paymentHash, LocalFailure (r.recipientAmount, Nil , UnsupportedFeatures (r.paymentRequest.features.features)) :: Nil )
57+ } else if (r.paymentRequest.paymentMetadata.exists(m => m.length > 128 )) {
58+ sender() ! PaymentFailed (paymentId, r.paymentHash, LocalFailure (r.recipientAmount, Nil , PaymentMetadataTooLong ) :: Nil )
59+ } else {
60+ r.paymentRequest.paymentSecret match {
61+ case None =>
62+ sender() ! PaymentFailed (paymentId, r.paymentHash, LocalFailure (r.recipientAmount, Nil , PaymentSecretMissing ) :: Nil )
63+ case Some (paymentSecret) if r.paymentRequest.features.allowMultiPart && nodeParams.features.hasFeature(BasicMultiPartPayment ) =>
64+ val fsm = outgoingPaymentFactory.spawnOutgoingMultiPartPayment(context, paymentCfg)
65+ fsm ! SendMultiPartPayment (sender(), paymentSecret, r.recipientNodeId, r.recipientAmount, finalExpiry, r.maxAttempts, r.paymentRequest.paymentMetadata, r.assistedRoutes, r.routeParams, userCustomTlvs = r.userCustomTlvs)
66+ case Some (paymentSecret) =>
67+ val finalPayload = PaymentOnion .createSinglePartPayload(r.recipientAmount, finalExpiry, paymentSecret, r.paymentRequest.paymentMetadata, r.userCustomTlvs)
68+ val fsm = outgoingPaymentFactory.spawnOutgoingPayment(context, paymentCfg)
69+ fsm ! PaymentLifecycle .SendPaymentToNode (sender(), r.recipientNodeId, finalPayload, r.maxAttempts, r.assistedRoutes, r.routeParams)
70+ }
6771 }
6872
6973 case r : SendSpontaneousPayment =>
0 commit comments