@@ -364,51 +364,12 @@ where
364364 	pub  fn  new ( network_graph :  G ,  entropy_source :  ES )  -> Self  { 
365365		Self  {  network_graph,  entropy_source } 
366366	} 
367- } 
368- 
369- impl < G :  Deref < Target =NetworkGraph < L > > ,  L :  Deref ,  ES :  Deref >  MessageRouter  for  DefaultMessageRouter < G ,  L ,  ES > 
370- where 
371- 	L :: Target :  Logger , 
372- 	ES :: Target :  EntropySource , 
373- { 
374- 	fn  find_path ( 
375- 		& self ,  sender :  PublicKey ,  peers :  Vec < PublicKey > ,  mut  destination :  Destination 
376- 	)  -> Result < OnionMessagePath ,  ( ) >  { 
377- 		let  network_graph = self . network_graph . deref ( ) . read_only ( ) ; 
378- 		destination. resolve ( & network_graph) ; 
379367
380- 		let  first_node = match  destination. first_node ( )  { 
381- 			Some ( first_node)  => first_node, 
382- 			None  => return  Err ( ( ) ) , 
383- 		} ; 
384- 
385- 		if  peers. contains ( & first_node)  || sender == first_node { 
386- 			Ok ( OnionMessagePath  { 
387- 				intermediate_nodes :  vec ! [ ] ,  destination,  first_node_addresses :  None 
388- 			} ) 
389- 		}  else  { 
390- 			let  node_announcement = network_graph
391- 				. node ( & NodeId :: from_pubkey ( & first_node) ) 
392- 				. and_then ( |node_info| node_info. announcement_info . as_ref ( ) ) 
393- 				. and_then ( |announcement_info| announcement_info. announcement_message . as_ref ( ) ) 
394- 				. map ( |node_announcement| & node_announcement. contents ) ; 
395- 
396- 			match  node_announcement { 
397- 				Some ( node_announcement)  if  node_announcement. features . supports_onion_messages ( )  => { 
398- 					let  first_node_addresses = Some ( node_announcement. addresses . clone ( ) ) ; 
399- 					Ok ( OnionMessagePath  { 
400- 						intermediate_nodes :  vec ! [ ] ,  destination,  first_node_addresses
401- 					} ) 
402- 				} , 
403- 				_ => Err ( ( ) ) , 
404- 			} 
405- 		} 
406- 	} 
407- 
408- 	fn  create_blinded_paths < 
368+ 	fn  create_blinded_paths_from_iter < 
369+ 		I :  Iterator < Item  = ForwardNode > , 
409370		T :  secp256k1:: Signing  + secp256k1:: Verification 
410371	> ( 
411- 		& self ,  recipient :  PublicKey ,  peers :  Vec < ForwardNode > ,  secp_ctx :  & Secp256k1 < T > , 
372+ 		& self ,  recipient :  PublicKey ,  peers :  I ,  secp_ctx :  & Secp256k1 < T > , 
412373	)  -> Result < Vec < BlindedPath > ,  ( ) >  { 
413374		// Limit the number of blinded paths that are computed. 
414375		const  MAX_PATHS :  usize  = 3 ; 
@@ -421,7 +382,7 @@ where
421382		let  is_recipient_announced =
422383			network_graph. nodes ( ) . contains_key ( & NodeId :: from_pubkey ( & recipient) ) ; 
423384
424- 		let  mut  peer_info = peers. into_iter ( ) 
385+ 		let  mut  peer_info = peers
425386			// Limit to peers with announced channels 
426387			. filter_map ( |peer|
427388				network_graph
@@ -464,6 +425,54 @@ where
464425	} 
465426} 
466427
428+ impl < G :  Deref < Target =NetworkGraph < L > > ,  L :  Deref ,  ES :  Deref >  MessageRouter  for  DefaultMessageRouter < G ,  L ,  ES > 
429+ where 
430+ 	L :: Target :  Logger , 
431+ 	ES :: Target :  EntropySource , 
432+ { 
433+ 	fn  find_path ( 
434+ 		& self ,  sender :  PublicKey ,  peers :  Vec < PublicKey > ,  mut  destination :  Destination 
435+ 	)  -> Result < OnionMessagePath ,  ( ) >  { 
436+ 		let  network_graph = self . network_graph . deref ( ) . read_only ( ) ; 
437+ 		destination. resolve ( & network_graph) ; 
438+ 
439+ 		let  first_node = match  destination. first_node ( )  { 
440+ 			Some ( first_node)  => first_node, 
441+ 			None  => return  Err ( ( ) ) , 
442+ 		} ; 
443+ 
444+ 		if  peers. contains ( & first_node)  || sender == first_node { 
445+ 			Ok ( OnionMessagePath  { 
446+ 				intermediate_nodes :  vec ! [ ] ,  destination,  first_node_addresses :  None 
447+ 			} ) 
448+ 		}  else  { 
449+ 			let  node_announcement = network_graph
450+ 				. node ( & NodeId :: from_pubkey ( & first_node) ) 
451+ 				. and_then ( |node_info| node_info. announcement_info . as_ref ( ) ) 
452+ 				. and_then ( |announcement_info| announcement_info. announcement_message . as_ref ( ) ) 
453+ 				. map ( |node_announcement| & node_announcement. contents ) ; 
454+ 
455+ 			match  node_announcement { 
456+ 				Some ( node_announcement)  if  node_announcement. features . supports_onion_messages ( )  => { 
457+ 					let  first_node_addresses = Some ( node_announcement. addresses . clone ( ) ) ; 
458+ 					Ok ( OnionMessagePath  { 
459+ 						intermediate_nodes :  vec ! [ ] ,  destination,  first_node_addresses
460+ 					} ) 
461+ 				} , 
462+ 				_ => Err ( ( ) ) , 
463+ 			} 
464+ 		} 
465+ 	} 
466+ 
467+ 	fn  create_blinded_paths < 
468+ 		T :  secp256k1:: Signing  + secp256k1:: Verification 
469+ 	> ( 
470+ 		& self ,  recipient :  PublicKey ,  peers :  Vec < ForwardNode > ,  secp_ctx :  & Secp256k1 < T > , 
471+ 	)  -> Result < Vec < BlindedPath > ,  ( ) >  { 
472+ 		self . create_blinded_paths_from_iter ( recipient,  peers. into_iter ( ) ,  secp_ctx) 
473+ 	} 
474+ } 
475+ 
467476/// A path for sending an [`OnionMessage`]. 
468477#[ derive( Clone ) ]  
469478pub  struct  OnionMessagePath  { 
0 commit comments