@@ -37,7 +37,7 @@ use lightning::chain::transaction::OutPoint;
3737use  lightning:: sign:: { InMemorySigner ,  Recipient ,  KeyMaterial ,  EntropySource ,  NodeSigner ,  SignerProvider } ; 
3838use  lightning:: events:: Event ; 
3939use  lightning:: ln:: { ChannelId ,  PaymentHash ,  PaymentPreimage ,  PaymentSecret } ; 
40- use  lightning:: ln:: channelmanager:: { ChainParameters ,  ChannelDetails ,  ChannelManager ,  PaymentId ,  RecipientOnionFields ,  Retry } ; 
40+ use  lightning:: ln:: channelmanager:: { ChainParameters ,  ChannelDetails ,  ChannelManager ,  PaymentId ,  RecipientOnionFields ,  Retry ,   InterceptId } ; 
4141use  lightning:: ln:: peer_handler:: { MessageHandler , PeerManager , SocketDescriptor , IgnoringMessageHandler } ; 
4242use  lightning:: ln:: msgs:: { self ,  DecodeError } ; 
4343use  lightning:: ln:: script:: ShutdownScript ; 
@@ -510,6 +510,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
510510
511511	let  mut  should_forward = false ; 
512512	let  mut  payments_received:  Vec < PaymentHash >  = Vec :: new ( ) ; 
513+ 	let  mut  intercepted_htlcs:  Vec < InterceptId >  = Vec :: new ( ) ; 
513514	let  mut  payments_sent:  u16  = 0 ; 
514515	let  mut  pending_funding_generation:  Vec < ( ChannelId ,  PublicKey ,  u64 ,  ScriptBuf ) >  = Vec :: new ( ) ; 
515516	let  mut  pending_funding_signatures = HashMap :: new ( ) ; 
@@ -585,6 +586,19 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
585586					PaymentId ( payment_hash. 0 ) ,  params,  Retry :: Attempts ( 2 ) 
586587				) ; 
587588			} , 
589+ 			17  => { 
590+ 				let  final_value_msat = slice_to_be24 ( get_slice ! ( 3 ) )  as  u64 ; 
591+ 				let  payment_params = PaymentParameters :: from_node_id ( get_pubkey ! ( ) ,  42 ) ; 
592+ 				let  params = RouteParameters :: from_payment_params_and_value ( 
593+ 					payment_params,  final_value_msat) ; 
594+ 				let  _ = channelmanager. send_preflight_probes ( params,  None ) ; 
595+ 			} , 
596+ 			18  => { 
597+ 				let  idx = u16:: from_be_bytes ( get_bytes ! ( 2 ) )  % cmp:: max ( payments_sent,  1 ) ; 
598+ 				let  mut  payment_id = PaymentId ( [ 0 ;  32 ] ) ; 
599+ 				payment_id. 0 [ 0 ..2 ] . copy_from_slice ( & idx. to_be_bytes ( ) ) ; 
600+ 				channelmanager. abandon_payment ( payment_id) ; 
601+ 			} , 
588602			5  => { 
589603				let  peer_id = get_slice ! ( 1 ) [ 0 ] ; 
590604				if  !peers. borrow ( ) [ peer_id as  usize ]  {  return ;  } 
@@ -717,7 +731,36 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
717731				channels. sort_by ( |a,  b| {  a. channel_id . cmp ( & b. channel_id )  } ) ; 
718732				channelmanager. force_close_broadcasting_latest_txn ( & channels[ channel_id] . channel_id ,  & channels[ channel_id] . counterparty . node_id ) . unwrap ( ) ; 
719733			} , 
720- 			// 15 is above 
734+ 			// 15, 16, 17, 18 is above 
735+ 			19  => { 
736+ 				let  mut  list = loss_detector. handler . get_peer_node_ids ( ) ; 
737+ 				list. sort_by_key ( |v| v. 0 ) ; 
738+ 				if  let  Some ( ( id,  _) )  = list. get ( 0 )  { 
739+ 					loss_detector. handler . disconnect_by_node_id ( * id) ; 
740+ 				} 
741+ 			} , 
742+ 			20  => loss_detector. handler . disconnect_all_peers ( ) , 
743+ 			21  => loss_detector. handler . timer_tick_occurred ( ) , 
744+ 			22  =>
745+ 				loss_detector. handler . broadcast_node_announcement ( [ 42 ;  3 ] ,  [ 43 ;  32 ] ,  Vec :: new ( ) ) , 
746+ 			32  => channelmanager. timer_tick_occurred ( ) , 
747+ 			33  => { 
748+ 				for  id in  intercepted_htlcs. drain ( ..)  { 
749+ 					channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ; 
750+ 				} 
751+ 			} 
752+ 			34  => { 
753+ 				let  amt = u64:: from_be_bytes ( get_bytes ! ( 8 ) ) ; 
754+ 				let  chans = channelmanager. list_channels ( ) ; 
755+ 				for  id in  intercepted_htlcs. drain ( ..)  { 
756+ 					if  chans. is_empty ( )  { 
757+ 						channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ; 
758+ 					}  else  { 
759+ 						let  chan = & chans[ amt as  usize  % chans. len ( ) ] ; 
760+ 						channelmanager. forward_intercepted_htlc ( id,  & chan. channel_id ,  chan. counterparty . node_id ,  amt) . unwrap ( ) ; 
761+ 					} 
762+ 				} 
763+ 			} 
721764			_ => return , 
722765		} 
723766		loss_detector. handler . process_events ( ) ; 
@@ -733,6 +776,11 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
733776				Event :: PendingHTLCsForwardable  { ..}  => { 
734777					should_forward = true ; 
735778				} , 
779+ 				Event :: HTLCIntercepted  {  intercept_id,  .. }  => { 
780+ 					if  !intercepted_htlcs. contains ( & intercept_id)  { 
781+ 						intercepted_htlcs. push ( intercept_id) ; 
782+ 					} 
783+ 				} , 
736784				_ => { } , 
737785			} 
738786		} 
0 commit comments