Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit 1e69bf3

Browse files
extract shared logic for htlc_intercepted, htlc_handling_failed, and channel_ready
1 parent 03fa3ed commit 1e69bf3

File tree

1 file changed

+43
-57
lines changed

1 file changed

+43
-57
lines changed

src/lsps2/service.rs

Lines changed: 43 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use lightning::util::logger::Level;
2828
use bitcoin::secp256k1::PublicKey;
2929

3030
use core::ops::Deref;
31+
use std::sync::MutexGuard;
3132

3233
use crate::lsps2::msgs::{
3334
BuyRequest, BuyResponse, GetInfoRequest, GetInfoResponse, LSPS2Message, LSPS2Request,
@@ -232,28 +233,13 @@ impl OutboundJITChannelState {
232233
} => {
233234
let mut payment_queue_lock = payment_queue.lock().unwrap();
234235
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-
}
236+
let (state, payment_action) = try_get_payment(
237+
Arc::clone(payment_queue),
238+
payment_queue_lock,
239+
*channel_id,
240+
*opening_fee_msat,
241+
);
242+
Ok((state, payment_action.map(|pa| HTLCInterceptedAction::ForwardPayment(pa))))
257243
},
258244
OutboundJITChannelState::PaymentForwarded { channel_id } => {
259245
let payment_forwarded =
@@ -269,19 +255,13 @@ impl OutboundJITChannelState {
269255
) -> Result<(Self, ForwardPaymentAction), ChannelStateError> {
270256
match self {
271257
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-
);
258+
let payment_queue_lock = payment_queue.lock().unwrap();
259+
if let (pending_payment_forward, Some(forward_payment)) = try_get_payment(
260+
Arc::clone(payment_queue),
261+
payment_queue_lock,
262+
channel_id,
263+
*opening_fee_msat,
264+
) {
285265
Ok((pending_payment_forward, forward_payment))
286266
} else {
287267
Err(ChannelStateError(
@@ -306,28 +286,13 @@ impl OutboundJITChannelState {
306286
opening_fee_msat,
307287
channel_id,
308288
} => {
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-
}
289+
let payment_queue_lock = payment_queue.lock().unwrap();
290+
Ok(try_get_payment(
291+
Arc::clone(payment_queue),
292+
payment_queue_lock,
293+
*channel_id,
294+
*opening_fee_msat,
295+
))
331296
},
332297
OutboundJITChannelState::PendingPayment {
333298
payment_queue,
@@ -1174,6 +1139,27 @@ fn calculate_amount_to_forward_per_htlc(
11741139
per_htlc_forwards
11751140
}
11761141

1142+
fn try_get_payment(
1143+
payment_queue: Arc<Mutex<PaymentQueue>>, mut payment_queue_lock: MutexGuard<PaymentQueue>,
1144+
channel_id: ChannelId, opening_fee_msat: u64,
1145+
) -> (OutboundJITChannelState, Option<ForwardPaymentAction>) {
1146+
if let Some((_payment_hash, htlcs)) = payment_queue_lock.pop_greater_than_msat(opening_fee_msat)
1147+
{
1148+
let pending_payment_forward = OutboundJITChannelState::PendingPaymentForward {
1149+
payment_queue,
1150+
opening_fee_msat,
1151+
channel_id,
1152+
};
1153+
let forward_payment =
1154+
ForwardPaymentAction(channel_id, FeePayment { htlcs, opening_fee_msat });
1155+
(pending_payment_forward, Some(forward_payment))
1156+
} else {
1157+
let pending_payment =
1158+
OutboundJITChannelState::PendingPayment { payment_queue, opening_fee_msat, channel_id };
1159+
(pending_payment, None)
1160+
}
1161+
}
1162+
11771163
#[cfg(test)]
11781164
mod tests {
11791165

0 commit comments

Comments
 (0)