Skip to content

Commit 100aee7

Browse files
committed
Add handle_message_received function in ChannelMessageHandler
- Handle behavior triggered when any message from any peer is received. - Manage retry mechanism for InvoiceRequest messages in ChannelManager related to PendingOutboundPayments. - Retrieve the InvoiceRequest, use a new reply path, and enqueue the messages for retry. - Ensure retries of InvoiceRequest messages if initial attempts fail due to connection loss, retrying when back online and receiving messages from peers.
1 parent 3dd3a1c commit 100aee7

File tree

5 files changed

+29
-0
lines changed

5 files changed

+29
-0
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,7 @@ mod tests {
658658
fn get_chain_hashes(&self) -> Option<Vec<ChainHash>> {
659659
Some(vec![ChainHash::using_genesis_block(Network::Testnet)])
660660
}
661+
fn handle_message_received(&self) -> Result<(), ()> { Ok(()) }
661662
}
662663
impl MessageSendEventsProvider for MsgHandler {
663664
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {

lightning/src/ln/channelmanager.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10132,6 +10132,21 @@ where
1013210132
"Dual-funded channels not supported".to_owned(),
1013310133
msg.channel_id.clone())), *counterparty_node_id);
1013410134
}
10135+
10136+
fn handle_message_received(&self) -> Result<(), ()> {
10137+
let invoice_requests = self.pending_outbound_payments.get_invoice_request_awaiting_invoice();
10138+
if invoice_requests.is_empty() { return Ok(());}
10139+
10140+
let reply_path = self.create_blinded_path()?;
10141+
let mut pending_offers_messages = self.pending_offers_messages.lock().unwrap();
10142+
10143+
for invoice_request in invoice_requests {
10144+
pending_offers_messages.extend(self.create_invoice_request_messages(
10145+
invoice_request, reply_path.clone()).map_err(|_| ())?);
10146+
}
10147+
10148+
Ok(())
10149+
}
1013510150
}
1013610151

1013710152
impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, L: Deref>

lightning/src/ln/msgs.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,6 +1550,13 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
15501550
/// If it's `None`, then no particular network chain hash compatibility will be enforced when
15511551
/// connecting to peers.
15521552
fn get_chain_hashes(&self) -> Option<Vec<ChainHash>>;
1553+
1554+
/// Retries the [`InvoiceRequest`] message for pending outbound payments
1555+
/// that are still awaiting a [`Bolt12Invoice`].
1556+
///
1557+
/// [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
1558+
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
1559+
fn handle_message_received(&self) -> Result<(), ()>;
15531560
}
15541561

15551562
/// A trait to describe an object which can receive routing messages.

lightning/src/ln/peer_handler.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,8 @@ impl ChannelMessageHandler for ErroringMessageHandler {
379379
fn handle_tx_abort(&self, their_node_id: &PublicKey, msg: &msgs::TxAbort) {
380380
ErroringMessageHandler::push_error(self, their_node_id, msg.channel_id);
381381
}
382+
383+
fn handle_message_received(&self) -> Result<(), ()> { Ok(()) }
382384
}
383385

384386
impl Deref for ErroringMessageHandler {
@@ -1742,6 +1744,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
17421744
log_trace!(logger, "Received message {:?} from {}", message, log_pubkey!(their_node_id));
17431745
}
17441746

1747+
let _ = self.message_handler.chan_handler.handle_message_received();
1748+
17451749
let mut should_forward = None;
17461750

17471751
match message {

lightning/src/util/test_utils.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,8 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
907907
fn handle_tx_abort(&self, _their_node_id: &PublicKey, msg: &msgs::TxAbort) {
908908
self.received_msg(wire::Message::TxAbort(msg.clone()));
909909
}
910+
911+
fn handle_message_received(&self) -> Result<(), ()> { Ok(()) }
910912
}
911913

912914
impl events::MessageSendEventsProvider for TestChannelMessageHandler {

0 commit comments

Comments
 (0)