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

Commit fa25cfd

Browse files
extract shared logic for htlc_intercepted, htlc_handling_failed, and channel_ready
1 parent b292249 commit fa25cfd

File tree

1 file changed

+43
-58
lines changed

1 file changed

+43
-58
lines changed

src/lsps2/service.rs

Lines changed: 43 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::lsps2::payment_queue::{InterceptedHTLC, PaymentQueue};
1616
use crate::lsps2::utils::{compute_opening_fee, is_valid_opening_fee_params};
1717
use crate::message_queue::MessageQueue;
1818
use crate::prelude::{HashMap, String, ToString, Vec};
19-
use crate::sync::{Arc, Mutex, RwLock};
19+
use crate::sync::{Arc, Mutex, MutexGuard, RwLock};
2020

2121
use lightning::events::HTLCDestination;
2222
use lightning::ln::channelmanager::{AChannelManager, InterceptId};
@@ -232,28 +232,13 @@ impl OutboundJITChannelState {
232232
} => {
233233
let mut payment_queue_lock = payment_queue.lock().unwrap();
234234
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))))
257242
},
258243
OutboundJITChannelState::PaymentForwarded { channel_id } => {
259244
let payment_forwarded =
@@ -269,19 +254,13 @@ impl OutboundJITChannelState {
269254
) -> Result<(Self, ForwardPaymentAction), ChannelStateError> {
270255
match self {
271256
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+
) {
285264
Ok((pending_payment_forward, forward_payment))
286265
} else {
287266
Err(ChannelStateError(
@@ -306,28 +285,13 @@ impl OutboundJITChannelState {
306285
opening_fee_msat,
307286
channel_id,
308287
} => {
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+
))
331295
},
332296
OutboundJITChannelState::PendingPayment {
333297
payment_queue,
@@ -1241,6 +1205,27 @@ fn calculate_amount_to_forward_per_htlc(
12411205
per_htlc_forwards
12421206
}
12431207

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+
12441229
#[cfg(test)]
12451230
mod tests {
12461231

0 commit comments

Comments
 (0)