@@ -9515,6 +9515,8 @@ where
9515
9515
L::Target: Logger,
9516
9516
{
9517
9517
fn handle_open_channel(&self, counterparty_node_id: &PublicKey, msg: &msgs::OpenChannel) {
9518
+
9519
+ let _ = self.retry_invoice_requests();
9518
9520
// Note that we never need to persist the updated ChannelManager for an inbound
9519
9521
// open_channel message - pre-funded channels are never written so there should be no
9520
9522
// change to the contents.
@@ -9533,12 +9535,14 @@ where
9533
9535
}
9534
9536
9535
9537
fn handle_open_channel_v2(&self, counterparty_node_id: &PublicKey, msg: &msgs::OpenChannelV2) {
9538
+ let _ = self.retry_invoice_requests();
9536
9539
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9537
9540
"Dual-funded channels not supported".to_owned(),
9538
9541
msg.common_fields.temporary_channel_id.clone())), *counterparty_node_id);
9539
9542
}
9540
9543
9541
9544
fn handle_accept_channel(&self, counterparty_node_id: &PublicKey, msg: &msgs::AcceptChannel) {
9545
+ let _ = self.retry_invoice_requests();
9542
9546
// Note that we never need to persist the updated ChannelManager for an inbound
9543
9547
// accept_channel message - pre-funded channels are never written so there should be no
9544
9548
// change to the contents.
@@ -9549,22 +9553,26 @@ where
9549
9553
}
9550
9554
9551
9555
fn handle_accept_channel_v2(&self, counterparty_node_id: &PublicKey, msg: &msgs::AcceptChannelV2) {
9556
+ let _ = self.retry_invoice_requests();
9552
9557
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9553
9558
"Dual-funded channels not supported".to_owned(),
9554
9559
msg.common_fields.temporary_channel_id.clone())), *counterparty_node_id);
9555
9560
}
9556
9561
9557
9562
fn handle_funding_created(&self, counterparty_node_id: &PublicKey, msg: &msgs::FundingCreated) {
9563
+ let _ = self.retry_invoice_requests();
9558
9564
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9559
9565
let _ = handle_error!(self, self.internal_funding_created(counterparty_node_id, msg), *counterparty_node_id);
9560
9566
}
9561
9567
9562
9568
fn handle_funding_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::FundingSigned) {
9569
+ let _ = self.retry_invoice_requests();
9563
9570
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9564
9571
let _ = handle_error!(self, self.internal_funding_signed(counterparty_node_id, msg), *counterparty_node_id);
9565
9572
}
9566
9573
9567
9574
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {
9575
+ let _ = self.retry_invoice_requests();
9568
9576
// Note that we never need to persist the updated ChannelManager for an inbound
9569
9577
// channel_ready message - while the channel's state will change, any channel_ready message
9570
9578
// will ultimately be re-sent on startup and the `ChannelMonitor` won't be updated so we
@@ -9581,43 +9589,50 @@ where
9581
9589
}
9582
9590
9583
9591
fn handle_stfu(&self, counterparty_node_id: &PublicKey, msg: &msgs::Stfu) {
9592
+ let _ = self.retry_invoice_requests();
9584
9593
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9585
9594
"Quiescence not supported".to_owned(),
9586
9595
msg.channel_id.clone())), *counterparty_node_id);
9587
9596
}
9588
9597
9589
9598
#[cfg(splicing)]
9590
9599
fn handle_splice(&self, counterparty_node_id: &PublicKey, msg: &msgs::Splice) {
9600
+ let _ = self.retry_invoice_requests();
9591
9601
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9592
9602
"Splicing not supported".to_owned(),
9593
9603
msg.channel_id.clone())), *counterparty_node_id);
9594
9604
}
9595
9605
9596
9606
#[cfg(splicing)]
9597
9607
fn handle_splice_ack(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceAck) {
9608
+ let _ = self.retry_invoice_requests();
9598
9609
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9599
9610
"Splicing not supported (splice_ack)".to_owned(),
9600
9611
msg.channel_id.clone())), *counterparty_node_id);
9601
9612
}
9602
9613
9603
9614
#[cfg(splicing)]
9604
9615
fn handle_splice_locked(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceLocked) {
9616
+ let _ = self.retry_invoice_requests();
9605
9617
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
9606
9618
"Splicing not supported (splice_locked)".to_owned(),
9607
9619
msg.channel_id.clone())), *counterparty_node_id);
9608
9620
}
9609
9621
9610
9622
fn handle_shutdown(&self, counterparty_node_id: &PublicKey, msg: &msgs::Shutdown) {
9623
+ let _ = self.retry_invoice_requests();
9611
9624
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9612
9625
let _ = handle_error!(self, self.internal_shutdown(counterparty_node_id, msg), *counterparty_node_id);
9613
9626
}
9614
9627
9615
9628
fn handle_closing_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::ClosingSigned) {
9629
+ let _ = self.retry_invoice_requests();
9616
9630
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9617
9631
let _ = handle_error!(self, self.internal_closing_signed(counterparty_node_id, msg), *counterparty_node_id);
9618
9632
}
9619
9633
9620
9634
fn handle_update_add_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateAddHTLC) {
9635
+ let _ = self.retry_invoice_requests();
9621
9636
// Note that we never need to persist the updated ChannelManager for an inbound
9622
9637
// update_add_htlc message - the message itself doesn't change our channel state only the
9623
9638
// `commitment_signed` message afterwards will.
@@ -9634,11 +9649,13 @@ where
9634
9649
}
9635
9650
9636
9651
fn handle_update_fulfill_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFulfillHTLC) {
9652
+ let _ = self.retry_invoice_requests();
9637
9653
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9638
9654
let _ = handle_error!(self, self.internal_update_fulfill_htlc(counterparty_node_id, msg), *counterparty_node_id);
9639
9655
}
9640
9656
9641
9657
fn handle_update_fail_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFailHTLC) {
9658
+ let _ = self.retry_invoice_requests();
9642
9659
// Note that we never need to persist the updated ChannelManager for an inbound
9643
9660
// update_fail_htlc message - the message itself doesn't change our channel state only the
9644
9661
// `commitment_signed` message afterwards will.
@@ -9655,6 +9672,7 @@ where
9655
9672
}
9656
9673
9657
9674
fn handle_update_fail_malformed_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFailMalformedHTLC) {
9675
+ let _ = self.retry_invoice_requests();
9658
9676
// Note that we never need to persist the updated ChannelManager for an inbound
9659
9677
// update_fail_malformed_htlc message - the message itself doesn't change our channel state
9660
9678
// only the `commitment_signed` message afterwards will.
@@ -9671,16 +9689,19 @@ where
9671
9689
}
9672
9690
9673
9691
fn handle_commitment_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::CommitmentSigned) {
9692
+ let _ = self.retry_invoice_requests();
9674
9693
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9675
9694
let _ = handle_error!(self, self.internal_commitment_signed(counterparty_node_id, msg), *counterparty_node_id);
9676
9695
}
9677
9696
9678
9697
fn handle_revoke_and_ack(&self, counterparty_node_id: &PublicKey, msg: &msgs::RevokeAndACK) {
9698
+ let _ = self.retry_invoice_requests();
9679
9699
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9680
9700
let _ = handle_error!(self, self.internal_revoke_and_ack(counterparty_node_id, msg), *counterparty_node_id);
9681
9701
}
9682
9702
9683
9703
fn handle_update_fee(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFee) {
9704
+ let _ = self.retry_invoice_requests();
9684
9705
// Note that we never need to persist the updated ChannelManager for an inbound
9685
9706
// update_fee message - the message itself doesn't change our channel state only the
9686
9707
// `commitment_signed` message afterwards will.
@@ -9697,11 +9718,13 @@ where
9697
9718
}
9698
9719
9699
9720
fn handle_announcement_signatures(&self, counterparty_node_id: &PublicKey, msg: &msgs::AnnouncementSignatures) {
9721
+ let _ = self.retry_invoice_requests();
9700
9722
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9701
9723
let _ = handle_error!(self, self.internal_announcement_signatures(counterparty_node_id, msg), *counterparty_node_id);
9702
9724
}
9703
9725
9704
9726
fn handle_channel_update(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelUpdate) {
9727
+ let _ = self.retry_invoice_requests();
9705
9728
PersistenceNotifierGuard::optionally_notify(self, || {
9706
9729
if let Ok(persist) = handle_error!(self, self.internal_channel_update(counterparty_node_id, msg), *counterparty_node_id) {
9707
9730
persist
@@ -9712,6 +9735,7 @@ where
9712
9735
}
9713
9736
9714
9737
fn handle_channel_reestablish(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReestablish) {
9738
+ let _ = self.retry_invoice_requests();
9715
9739
let _persistence_guard = PersistenceNotifierGuard::optionally_notify(self, || {
9716
9740
let res = self.internal_channel_reestablish(counterparty_node_id, msg);
9717
9741
let persist = match &res {
@@ -9725,6 +9749,7 @@ where
9725
9749
}
9726
9750
9727
9751
fn peer_disconnected(&self, counterparty_node_id: &PublicKey) {
9752
+ let _ = self.retry_invoice_requests();
9728
9753
let _persistence_guard = PersistenceNotifierGuard::optionally_notify(
9729
9754
self, || NotifyOption::SkipPersistHandleEvents);
9730
9755
let mut failed_channels = Vec::new();
@@ -9847,6 +9872,7 @@ where
9847
9872
}
9848
9873
9849
9874
fn peer_connected(&self, counterparty_node_id: &PublicKey, init_msg: &msgs::Init, inbound: bool) -> Result<(), ()> {
9875
+ let _ = self.retry_invoice_requests();
9850
9876
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), None, None);
9851
9877
if !init_msg.features.supports_static_remote_key() {
9852
9878
log_debug!(logger, "Peer {} does not support static remote key, disconnecting", log_pubkey!(counterparty_node_id));
@@ -9961,6 +9987,7 @@ where
9961
9987
}
9962
9988
9963
9989
fn handle_error(&self, counterparty_node_id: &PublicKey, msg: &msgs::ErrorMessage) {
9990
+ let _ = self.retry_invoice_requests();
9964
9991
match &msg.data as &str {
9965
9992
"cannot co-op close channel w/ active htlcs"|
9966
9993
"link failed to shutdown" =>
@@ -10080,58 +10107,82 @@ where
10080
10107
}
10081
10108
10082
10109
fn handle_tx_add_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddInput) {
10110
+ let _ = self.retry_invoice_requests();
10083
10111
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10084
10112
"Dual-funded channels not supported".to_owned(),
10085
10113
msg.channel_id.clone())), *counterparty_node_id);
10086
10114
}
10087
10115
10088
10116
fn handle_tx_add_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddOutput) {
10117
+ let _ = self.retry_invoice_requests();
10089
10118
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10090
10119
"Dual-funded channels not supported".to_owned(),
10091
10120
msg.channel_id.clone())), *counterparty_node_id);
10092
10121
}
10093
10122
10094
10123
fn handle_tx_remove_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveInput) {
10124
+ let _ = self.retry_invoice_requests();
10095
10125
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10096
10126
"Dual-funded channels not supported".to_owned(),
10097
10127
msg.channel_id.clone())), *counterparty_node_id);
10098
10128
}
10099
10129
10100
10130
fn handle_tx_remove_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveOutput) {
10131
+ let _ = self.retry_invoice_requests();
10101
10132
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10102
10133
"Dual-funded channels not supported".to_owned(),
10103
10134
msg.channel_id.clone())), *counterparty_node_id);
10104
10135
}
10105
10136
10106
10137
fn handle_tx_complete(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxComplete) {
10138
+ let _ = self.retry_invoice_requests();
10107
10139
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10108
10140
"Dual-funded channels not supported".to_owned(),
10109
10141
msg.channel_id.clone())), *counterparty_node_id);
10110
10142
}
10111
10143
10112
10144
fn handle_tx_signatures(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxSignatures) {
10145
+ let _ = self.retry_invoice_requests();
10113
10146
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10114
10147
"Dual-funded channels not supported".to_owned(),
10115
10148
msg.channel_id.clone())), *counterparty_node_id);
10116
10149
}
10117
10150
10118
10151
fn handle_tx_init_rbf(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxInitRbf) {
10152
+ let _ = self.retry_invoice_requests();
10119
10153
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10120
10154
"Dual-funded channels not supported".to_owned(),
10121
10155
msg.channel_id.clone())), *counterparty_node_id);
10122
10156
}
10123
10157
10124
10158
fn handle_tx_ack_rbf(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAckRbf) {
10159
+ let _ = self.retry_invoice_requests();
10125
10160
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10126
10161
"Dual-funded channels not supported".to_owned(),
10127
10162
msg.channel_id.clone())), *counterparty_node_id);
10128
10163
}
10129
10164
10130
10165
fn handle_tx_abort(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAbort) {
10166
+ let _ = self.retry_invoice_requests();
10131
10167
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
10132
10168
"Dual-funded channels not supported".to_owned(),
10133
10169
msg.channel_id.clone())), *counterparty_node_id);
10134
10170
}
10171
+
10172
+ fn retry_invoice_requests(&self) -> Result<(), ()> {
10173
+ let invoice_requests = self.pending_outbound_payments.get_invoice_request_awaiting_invoice();
10174
+ if invoice_requests.is_empty() { return Ok(());}
10175
+
10176
+ let reply_path = self.create_blinded_path()?;
10177
+ let mut pending_offers_messages = self.pending_offers_messages.lock().unwrap();
10178
+
10179
+ for invoice_request in invoice_requests {
10180
+ pending_offers_messages.extend(self.create_invoice_request_messages(
10181
+ invoice_request, reply_path.clone()).map_err(|_| ())?);
10182
+ }
10183
+
10184
+ Ok(())
10185
+ }
10135
10186
}
10136
10187
10137
10188
impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, L: Deref>
0 commit comments