@@ -16,7 +16,7 @@ use crate::lsps2::payment_queue::{InterceptedHTLC, PaymentQueue};
16
16
use crate :: lsps2:: utils:: { compute_opening_fee, is_valid_opening_fee_params} ;
17
17
use crate :: message_queue:: MessageQueue ;
18
18
use crate :: prelude:: { HashMap , String , ToString , Vec } ;
19
- use crate :: sync:: { Arc , Mutex , RwLock } ;
19
+ use crate :: sync:: { Arc , Mutex , MutexGuard , RwLock } ;
20
20
21
21
use lightning:: events:: HTLCDestination ;
22
22
use lightning:: ln:: channelmanager:: { AChannelManager , FailureCode , InterceptId } ;
@@ -232,28 +232,13 @@ impl OutboundJITChannelState {
232
232
} => {
233
233
let mut payment_queue_lock = payment_queue. lock ( ) . unwrap ( ) ;
234
234
payment_queue_lock. add_htlc ( htlc) ;
235
- if let Some ( ( _payment_hash, htlcs) ) =
236
- payment_queue_lock. pop_greater_than_msat ( * opening_fee_msat)
237
- {
238
- let pending_payment_forward = OutboundJITChannelState :: PendingPaymentForward {
239
- payment_queue : payment_queue. clone ( ) ,
240
- opening_fee_msat : * opening_fee_msat,
241
- channel_id : * channel_id,
242
- } ;
243
- let forward_payment =
244
- HTLCInterceptedAction :: ForwardPayment ( ForwardPaymentAction (
245
- * channel_id,
246
- FeePayment { htlcs, opening_fee_msat : * opening_fee_msat } ,
247
- ) ) ;
248
- Ok ( ( pending_payment_forward, Some ( forward_payment) ) )
249
- } else {
250
- let pending_payment = OutboundJITChannelState :: PendingPayment {
251
- payment_queue : payment_queue. clone ( ) ,
252
- opening_fee_msat : * opening_fee_msat,
253
- channel_id : * channel_id,
254
- } ;
255
- Ok ( ( pending_payment, None ) )
256
- }
235
+ let ( state, payment_action) = try_get_payment (
236
+ Arc :: clone ( payment_queue) ,
237
+ payment_queue_lock,
238
+ * channel_id,
239
+ * opening_fee_msat,
240
+ ) ;
241
+ Ok ( ( state, payment_action. map ( |pa| HTLCInterceptedAction :: ForwardPayment ( pa) ) ) )
257
242
} ,
258
243
OutboundJITChannelState :: PaymentForwarded { channel_id } => {
259
244
let payment_forwarded =
@@ -269,19 +254,13 @@ impl OutboundJITChannelState {
269
254
) -> Result < ( Self , ForwardPaymentAction ) , ChannelStateError > {
270
255
match self {
271
256
OutboundJITChannelState :: PendingChannelOpen { payment_queue, opening_fee_msat } => {
272
- let mut payment_queue_lock = payment_queue. lock ( ) . unwrap ( ) ;
273
- if let Some ( ( _payment_hash, htlcs) ) =
274
- payment_queue_lock. pop_greater_than_msat ( * opening_fee_msat)
275
- {
276
- let pending_payment_forward = OutboundJITChannelState :: PendingPaymentForward {
277
- payment_queue : Arc :: clone ( & payment_queue) ,
278
- opening_fee_msat : * opening_fee_msat,
279
- channel_id,
280
- } ;
281
- let forward_payment = ForwardPaymentAction (
282
- channel_id,
283
- FeePayment { opening_fee_msat : * opening_fee_msat, htlcs } ,
284
- ) ;
257
+ let payment_queue_lock = payment_queue. lock ( ) . unwrap ( ) ;
258
+ if let ( pending_payment_forward, Some ( forward_payment) ) = try_get_payment (
259
+ Arc :: clone ( payment_queue) ,
260
+ payment_queue_lock,
261
+ channel_id,
262
+ * opening_fee_msat,
263
+ ) {
285
264
Ok ( ( pending_payment_forward, forward_payment) )
286
265
} else {
287
266
Err ( ChannelStateError (
@@ -306,28 +285,13 @@ impl OutboundJITChannelState {
306
285
opening_fee_msat,
307
286
channel_id,
308
287
} => {
309
- let mut payment_queue_lock = payment_queue. lock ( ) . unwrap ( ) ;
310
- if let Some ( ( _payment_hash, htlcs) ) =
311
- payment_queue_lock. pop_greater_than_msat ( * opening_fee_msat)
312
- {
313
- let pending_payment_forward = OutboundJITChannelState :: PendingPaymentForward {
314
- payment_queue : payment_queue. clone ( ) ,
315
- opening_fee_msat : * opening_fee_msat,
316
- channel_id : * channel_id,
317
- } ;
318
- let forward_payment = ForwardPaymentAction (
319
- * channel_id,
320
- FeePayment { htlcs, opening_fee_msat : * opening_fee_msat } ,
321
- ) ;
322
- Ok ( ( pending_payment_forward, Some ( forward_payment) ) )
323
- } else {
324
- let pending_payment = OutboundJITChannelState :: PendingPayment {
325
- payment_queue : payment_queue. clone ( ) ,
326
- opening_fee_msat : * opening_fee_msat,
327
- channel_id : * channel_id,
328
- } ;
329
- Ok ( ( pending_payment, None ) )
330
- }
288
+ let payment_queue_lock = payment_queue. lock ( ) . unwrap ( ) ;
289
+ Ok ( try_get_payment (
290
+ Arc :: clone ( payment_queue) ,
291
+ payment_queue_lock,
292
+ * channel_id,
293
+ * opening_fee_msat,
294
+ ) )
331
295
} ,
332
296
OutboundJITChannelState :: PendingPayment {
333
297
payment_queue,
@@ -1241,6 +1205,27 @@ fn calculate_amount_to_forward_per_htlc(
1241
1205
per_htlc_forwards
1242
1206
}
1243
1207
1208
+ fn try_get_payment (
1209
+ payment_queue : Arc < Mutex < PaymentQueue > > , mut payment_queue_lock : MutexGuard < PaymentQueue > ,
1210
+ channel_id : ChannelId , opening_fee_msat : u64 ,
1211
+ ) -> ( OutboundJITChannelState , Option < ForwardPaymentAction > ) {
1212
+ if let Some ( ( _payment_hash, htlcs) ) = payment_queue_lock. pop_greater_than_msat ( opening_fee_msat)
1213
+ {
1214
+ let pending_payment_forward = OutboundJITChannelState :: PendingPaymentForward {
1215
+ payment_queue,
1216
+ opening_fee_msat,
1217
+ channel_id,
1218
+ } ;
1219
+ let forward_payment =
1220
+ ForwardPaymentAction ( channel_id, FeePayment { htlcs, opening_fee_msat } ) ;
1221
+ ( pending_payment_forward, Some ( forward_payment) )
1222
+ } else {
1223
+ let pending_payment =
1224
+ OutboundJITChannelState :: PendingPayment { payment_queue, opening_fee_msat, channel_id } ;
1225
+ ( pending_payment, None )
1226
+ }
1227
+ }
1228
+
1244
1229
#[ cfg( test) ]
1245
1230
mod tests {
1246
1231
0 commit comments