@@ -123,7 +123,7 @@ use core::{cmp, mem};
123
123
use core::borrow::Borrow;
124
124
use core::cell::RefCell;
125
125
use crate::io::Read;
126
- use crate::sync::{Arc, Mutex, RwLock, RwLockReadGuard, FairRwLock, LockTestExt, LockHeldState };
126
+ use crate::sync::{Arc, FairRwLock, LockHeldState, LockTestExt, Mutex, MutexGuard, RwLock, RwLockReadGuard };
127
127
use core::sync::atomic::{AtomicUsize, AtomicBool, Ordering};
128
128
use core::time::Duration;
129
129
use core::ops::Deref;
@@ -10891,6 +10891,27 @@ where
10891
10891
now
10892
10892
}
10893
10893
10894
+ fn get_peers_for_blinded_path<'a, I>(
10895
+ peer_state_iter: I,
10896
+ ) -> impl Iterator<Item = MessageForwardNode> + 'a
10897
+ where
10898
+ I: Iterator<Item = (&'a PublicKey, MutexGuard<'a, PeerState<SP>>)> + 'a,
10899
+ PeerState<SP>: 'a,
10900
+ {
10901
+ peer_state_iter
10902
+ .filter(|(_, peer)| peer.is_connected)
10903
+ .filter(|(_, peer)| peer.latest_features.supports_onion_messages())
10904
+ .map(|(node_id, peer)| MessageForwardNode {
10905
+ node_id: *node_id,
10906
+ short_channel_id: peer
10907
+ .channel_by_id
10908
+ .iter()
10909
+ .filter(|(_, channel)| channel.context().is_usable())
10910
+ .min_by_key(|(_, channel)| channel.context().channel_creation_height)
10911
+ .and_then(|(_, channel)| channel.context().get_short_channel_id()),
10912
+ })
10913
+ }
10914
+
10894
10915
/// Creates a collection of blinded paths by delegating to
10895
10916
/// [`MessageRouter::create_blinded_paths`].
10896
10917
///
@@ -10899,13 +10920,14 @@ where
10899
10920
let recipient = self.get_our_node_id();
10900
10921
let secp_ctx = &self.secp_ctx;
10901
10922
10902
- let peers = self.per_peer_state.read().unwrap()
10923
+ let per_peer_state = self.per_peer_state.read().unwrap();
10924
+ let peer_state_iter = per_peer_state
10903
10925
.iter()
10904
- .map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
10905
- .filter(|(_, peer)| peer.is_connected)
10906
- .filter(|(_, peer)| peer.latest_features.supports_onion_messages() )
10907
- .map(|(node_id, _)| * node_id)
10908
- .collect::<Vec<_>> ();
10926
+ .map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()));
10927
+
10928
+ let peers = Self::get_peers_for_blinded_path(peer_state_iter )
10929
+ .map(|node| node. node_id)
10930
+ .collect();
10909
10931
10910
10932
self.message_router
10911
10933
.create_blinded_paths(recipient, context, peers, secp_ctx)
@@ -10920,20 +10942,12 @@ where
10920
10942
let recipient = self.get_our_node_id();
10921
10943
let secp_ctx = &self.secp_ctx;
10922
10944
10923
- let peers = self.per_peer_state.read().unwrap()
10945
+ let per_peer_state = self.per_peer_state.read().unwrap();
10946
+ let peer_state_iter = per_peer_state
10924
10947
.iter()
10925
- .map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
10926
- .filter(|(_, peer)| peer.is_connected)
10927
- .filter(|(_, peer)| peer.latest_features.supports_onion_messages())
10928
- .map(|(node_id, peer)| MessageForwardNode {
10929
- node_id: *node_id,
10930
- short_channel_id: peer.channel_by_id
10931
- .iter()
10932
- .filter(|(_, channel)| channel.context().is_usable())
10933
- .min_by_key(|(_, channel)| channel.context().channel_creation_height)
10934
- .and_then(|(_, channel)| channel.context().get_short_channel_id()),
10935
- })
10936
- .collect::<Vec<_>>();
10948
+ .map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()));
10949
+
10950
+ let peers = Self::get_peers_for_blinded_path(peer_state_iter).collect();
10937
10951
10938
10952
self.message_router
10939
10953
.create_compact_blinded_paths(recipient, MessageContext::Offers(context), peers, secp_ctx)
0 commit comments