@@ -3242,134 +3242,137 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
32423242							continue ; 
32433243						} 
32443244					} ; 
3245- 					if  let  hash_map:: Entry :: Occupied ( mut  chan)  = channel_state. by_id . entry ( forward_chan_id)  { 
3246- 						let  mut  add_htlc_msgs = Vec :: new ( ) ; 
3247- 						let  mut  fail_htlc_msgs = Vec :: new ( ) ; 
3248- 						for  forward_info in  pending_forwards. drain ( ..)  { 
3249- 							match  forward_info { 
3250- 								HTLCForwardInfo :: AddHTLC  {  prev_short_channel_id,  prev_htlc_id,  forward_info :  PendingHTLCInfo  { 
3251- 										routing :  PendingHTLCRouting :: Forward  { 
3252- 											onion_packet,  ..
3253- 										} ,  incoming_shared_secret,  payment_hash,  amt_to_forward,  outgoing_cltv_value } , 
3254- 										prev_funding_outpoint }  => { 
3255- 									log_trace ! ( self . logger,  "Adding HTLC from short id {} with payment_hash {} to channel with short id {} after delay" ,  prev_short_channel_id,  log_bytes!( payment_hash. 0 ) ,  short_chan_id) ; 
3256- 									let  htlc_source = HTLCSource :: PreviousHopData ( HTLCPreviousHopData  { 
3257- 										short_channel_id :  prev_short_channel_id, 
3258- 										outpoint :  prev_funding_outpoint, 
3259- 										htlc_id :  prev_htlc_id, 
3260- 										incoming_packet_shared_secret :  incoming_shared_secret, 
3261- 										// Phantom payments are only PendingHTLCRouting::Receive. 
3262- 										phantom_shared_secret :  None , 
3263- 									} ) ; 
3264- 									match  chan. get_mut ( ) . send_htlc ( amt_to_forward,  payment_hash,  outgoing_cltv_value,  htlc_source. clone ( ) ,  onion_packet,  & self . logger )  { 
3265- 										Err ( e)  => { 
3266- 											if  let  ChannelError :: Ignore ( msg)  = e { 
3267- 												log_trace ! ( self . logger,  "Failed to forward HTLC with payment_hash {}: {}" ,  log_bytes!( payment_hash. 0 ) ,  msg) ; 
3268- 											}  else  { 
3269- 												panic ! ( "Stated return value requirements in send_htlc() were not met" ) ; 
3270- 											} 
3271- 											let  ( failure_code,  data)  = self . get_htlc_temp_fail_err_and_data ( 0x1000 |7 ,  short_chan_id,  chan. get ( ) ) ; 
3272- 											failed_forwards. push ( ( htlc_source,  payment_hash, 
3273- 												HTLCFailReason :: Reason  {  failure_code,  data } , 
3274- 												HTLCDestination :: NextHopChannel  {  node_id :  Some ( chan. get ( ) . get_counterparty_node_id ( ) ) ,  channel_id :  forward_chan_id } 
3275- 											) ) ; 
3276- 											continue ; 
3277- 										} , 
3278- 										Ok ( update_add)  => { 
3279- 											match  update_add { 
3280- 												Some ( msg)  => {  add_htlc_msgs. push ( msg) ;  } , 
3281- 												None  => { 
3282- 													// Nothing to do here...we're waiting on a remote 
3283- 													// revoke_and_ack before we can add anymore HTLCs. The Channel 
3284- 													// will automatically handle building the update_add_htlc and 
3285- 													// commitment_signed messages when we can. 
3286- 													// TODO: Do some kind of timer to set the channel as !is_live() 
3287- 													// as we don't really want others relying on us relaying through 
3288- 													// this channel currently :/. 
3245+ 					match  channel_state. by_id . entry ( forward_chan_id)  { 
3246+ 						hash_map:: Entry :: Vacant ( _)  => { 
3247+ 							forwarding_channel_not_found ! ( ) ; 
3248+ 							continue ; 
3249+ 						} , 
3250+ 						hash_map:: Entry :: Occupied ( mut  chan)  => { 
3251+ 							let  mut  add_htlc_msgs = Vec :: new ( ) ; 
3252+ 							let  mut  fail_htlc_msgs = Vec :: new ( ) ; 
3253+ 							for  forward_info in  pending_forwards. drain ( ..)  { 
3254+ 								match  forward_info { 
3255+ 									HTLCForwardInfo :: AddHTLC  {  prev_short_channel_id,  prev_htlc_id,  forward_info :  PendingHTLCInfo  { 
3256+ 											routing :  PendingHTLCRouting :: Forward  { 
3257+ 												onion_packet,  ..
3258+ 											} ,  incoming_shared_secret,  payment_hash,  amt_to_forward,  outgoing_cltv_value } , 
3259+ 											prev_funding_outpoint }  => { 
3260+ 										log_trace ! ( self . logger,  "Adding HTLC from short id {} with payment_hash {} to channel with short id {} after delay" ,  prev_short_channel_id,  log_bytes!( payment_hash. 0 ) ,  short_chan_id) ; 
3261+ 										let  htlc_source = HTLCSource :: PreviousHopData ( HTLCPreviousHopData  { 
3262+ 											short_channel_id :  prev_short_channel_id, 
3263+ 											outpoint :  prev_funding_outpoint, 
3264+ 											htlc_id :  prev_htlc_id, 
3265+ 											incoming_packet_shared_secret :  incoming_shared_secret, 
3266+ 											// Phantom payments are only PendingHTLCRouting::Receive. 
3267+ 											phantom_shared_secret :  None , 
3268+ 										} ) ; 
3269+ 										match  chan. get_mut ( ) . send_htlc ( amt_to_forward,  payment_hash,  outgoing_cltv_value,  htlc_source. clone ( ) ,  onion_packet,  & self . logger )  { 
3270+ 											Err ( e)  => { 
3271+ 												if  let  ChannelError :: Ignore ( msg)  = e { 
3272+ 													log_trace ! ( self . logger,  "Failed to forward HTLC with payment_hash {}: {}" ,  log_bytes!( payment_hash. 0 ) ,  msg) ; 
3273+ 												}  else  { 
3274+ 													panic ! ( "Stated return value requirements in send_htlc() were not met" ) ; 
3275+ 												} 
3276+ 												let  ( failure_code,  data)  = self . get_htlc_temp_fail_err_and_data ( 0x1000 |7 ,  short_chan_id,  chan. get ( ) ) ; 
3277+ 												failed_forwards. push ( ( htlc_source,  payment_hash, 
3278+ 													HTLCFailReason :: Reason  {  failure_code,  data } , 
3279+ 													HTLCDestination :: NextHopChannel  {  node_id :  Some ( chan. get ( ) . get_counterparty_node_id ( ) ) ,  channel_id :  forward_chan_id } 
3280+ 												) ) ; 
3281+ 												continue ; 
3282+ 											} , 
3283+ 											Ok ( update_add)  => { 
3284+ 												match  update_add { 
3285+ 													Some ( msg)  => {  add_htlc_msgs. push ( msg) ;  } , 
3286+ 													None  => { 
3287+ 														// Nothing to do here...we're waiting on a remote 
3288+ 														// revoke_and_ack before we can add anymore HTLCs. The Channel 
3289+ 														// will automatically handle building the update_add_htlc and 
3290+ 														// commitment_signed messages when we can. 
3291+ 														// TODO: Do some kind of timer to set the channel as !is_live() 
3292+ 														// as we don't really want others relying on us relaying through 
3293+ 														// this channel currently :/. 
3294+ 													} 
32893295												} 
32903296											} 
32913297										} 
3292- 									} 
3293- 								} , 
3294- 								HTLCForwardInfo :: AddHTLC  {  .. }  => { 
3295- 									panic ! ( "short_channel_id != 0 should imply any pending_forward entries are of type Forward" ) ; 
3296- 								} , 
3297- 								HTLCForwardInfo :: FailHTLC  {  htlc_id,  err_packet }  => { 
3298- 									log_trace ! ( self . logger,  "Failing HTLC back to channel with short id {} (backward HTLC ID {}) after delay" ,  short_chan_id,  htlc_id) ; 
3299- 									match  chan. get_mut ( ) . get_update_fail_htlc ( htlc_id,  err_packet,  & self . logger )  { 
3300- 										Err ( e)  => { 
3301- 											if  let  ChannelError :: Ignore ( msg)  = e { 
3302- 												log_trace ! ( self . logger,  "Failed to fail HTLC with ID {} backwards to short_id {}: {}" ,  htlc_id,  short_chan_id,  msg) ; 
3303- 											}  else  { 
3304- 												panic ! ( "Stated return value requirements in get_update_fail_htlc() were not met" ) ; 
3298+ 									} , 
3299+ 									HTLCForwardInfo :: AddHTLC  {  .. }  => { 
3300+ 										panic ! ( "short_channel_id != 0 should imply any pending_forward entries are of type Forward" ) ; 
3301+ 									} , 
3302+ 									HTLCForwardInfo :: FailHTLC  {  htlc_id,  err_packet }  => { 
3303+ 										log_trace ! ( self . logger,  "Failing HTLC back to channel with short id {} (backward HTLC ID {}) after delay" ,  short_chan_id,  htlc_id) ; 
3304+ 										match  chan. get_mut ( ) . get_update_fail_htlc ( htlc_id,  err_packet,  & self . logger )  { 
3305+ 											Err ( e)  => { 
3306+ 												if  let  ChannelError :: Ignore ( msg)  = e { 
3307+ 													log_trace ! ( self . logger,  "Failed to fail HTLC with ID {} backwards to short_id {}: {}" ,  htlc_id,  short_chan_id,  msg) ; 
3308+ 												}  else  { 
3309+ 													panic ! ( "Stated return value requirements in get_update_fail_htlc() were not met" ) ; 
3310+ 												} 
3311+ 												// fail-backs are best-effort, we probably already have one 
3312+ 												// pending, and if not that's OK, if not, the channel is on 
3313+ 												// the chain and sending the HTLC-Timeout is their problem. 
3314+ 												continue ; 
3315+ 											} , 
3316+ 											Ok ( Some ( msg) )  => {  fail_htlc_msgs. push ( msg) ;  } , 
3317+ 											Ok ( None )  => { 
3318+ 												// Nothing to do here...we're waiting on a remote 
3319+ 												// revoke_and_ack before we can update the commitment 
3320+ 												// transaction. The Channel will automatically handle 
3321+ 												// building the update_fail_htlc and commitment_signed 
3322+ 												// messages when we can. 
3323+ 												// We don't need any kind of timer here as they should fail 
3324+ 												// the channel onto the chain if they can't get our 
3325+ 												// update_fail_htlc in time, it's not our problem. 
33053326											} 
3306- 											// fail-backs are best-effort, we probably already have one 
3307- 											// pending, and if not that's OK, if not, the channel is on 
3308- 											// the chain and sending the HTLC-Timeout is their problem. 
3309- 											continue ; 
3310- 										} , 
3311- 										Ok ( Some ( msg) )  => {  fail_htlc_msgs. push ( msg) ;  } , 
3312- 										Ok ( None )  => { 
3313- 											// Nothing to do here...we're waiting on a remote 
3314- 											// revoke_and_ack before we can update the commitment 
3315- 											// transaction. The Channel will automatically handle 
3316- 											// building the update_fail_htlc and commitment_signed 
3317- 											// messages when we can. 
3318- 											// We don't need any kind of timer here as they should fail 
3319- 											// the channel onto the chain if they can't get our 
3320- 											// update_fail_htlc in time, it's not our problem. 
33213327										} 
3322- 									} 
3323- 								} , 
3328+ 									} , 
3329+ 								} 
33243330							} 
3325- 						} 
33263331
3327- 						if  !add_htlc_msgs. is_empty ( )  || !fail_htlc_msgs. is_empty ( )  { 
3328- 							let  ( commitment_msg,  monitor_update)  = match  chan. get_mut ( ) . send_commitment ( & self . logger )  { 
3329- 								Ok ( res)  => res, 
3330- 								Err ( e)  => { 
3331- 									// We surely failed send_commitment due to bad keys, in that case 
3332- 									// close channel and then send error message to peer. 
3333- 									let  counterparty_node_id = chan. get ( ) . get_counterparty_node_id ( ) ; 
3334- 									let  err:  Result < ( ) ,  _ >   = match  e { 
3335- 										ChannelError :: Ignore ( _)  | ChannelError :: Warn ( _)  => { 
3336- 											panic ! ( "Stated return value requirements in send_commitment() were not met" ) ; 
3337- 										} 
3338- 										ChannelError :: Close ( msg)  => { 
3339- 											log_trace ! ( self . logger,  "Closing channel {} due to Close-required error: {}" ,  log_bytes!( chan. key( ) [ ..] ) ,  msg) ; 
3340- 											let  mut  channel = remove_channel ! ( self ,  chan) ; 
3341- 											// ChannelClosed event is generated by handle_error for us. 
3342- 											Err ( MsgHandleErrInternal :: from_finish_shutdown ( msg,  channel. channel_id ( ) ,  channel. get_user_id ( ) ,  channel. force_shutdown ( true ) ,  self . get_channel_update_for_broadcast ( & channel) . ok ( ) ) ) 
3343- 										} , 
3344- 									} ; 
3345- 									handle_errors. push ( ( counterparty_node_id,  err) ) ; 
3346- 									continue ; 
3347- 								} 
3348- 							} ; 
3349- 							match  self . chain_monitor . update_channel ( chan. get ( ) . get_funding_txo ( ) . unwrap ( ) ,  monitor_update)  { 
3350- 								ChannelMonitorUpdateStatus :: Completed  => { } , 
3351- 								e => { 
3352- 									handle_errors. push ( ( chan. get ( ) . get_counterparty_node_id ( ) ,  handle_monitor_update_res ! ( self ,  e,  chan,  RAACommitmentOrder :: CommitmentFirst ,  false ,  true ) ) ) ; 
3353- 									continue ; 
3332+ 							if  !add_htlc_msgs. is_empty ( )  || !fail_htlc_msgs. is_empty ( )  { 
3333+ 								let  ( commitment_msg,  monitor_update)  = match  chan. get_mut ( ) . send_commitment ( & self . logger )  { 
3334+ 									Ok ( res)  => res, 
3335+ 									Err ( e)  => { 
3336+ 										// We surely failed send_commitment due to bad keys, in that case 
3337+ 										// close channel and then send error message to peer. 
3338+ 										let  counterparty_node_id = chan. get ( ) . get_counterparty_node_id ( ) ; 
3339+ 										let  err:  Result < ( ) ,  _ >   = match  e { 
3340+ 											ChannelError :: Ignore ( _)  | ChannelError :: Warn ( _)  => { 
3341+ 												panic ! ( "Stated return value requirements in send_commitment() were not met" ) ; 
3342+ 											} 
3343+ 											ChannelError :: Close ( msg)  => { 
3344+ 												log_trace ! ( self . logger,  "Closing channel {} due to Close-required error: {}" ,  log_bytes!( chan. key( ) [ ..] ) ,  msg) ; 
3345+ 												let  mut  channel = remove_channel ! ( self ,  chan) ; 
3346+ 												// ChannelClosed event is generated by handle_error for us. 
3347+ 												Err ( MsgHandleErrInternal :: from_finish_shutdown ( msg,  channel. channel_id ( ) ,  channel. get_user_id ( ) ,  channel. force_shutdown ( true ) ,  self . get_channel_update_for_broadcast ( & channel) . ok ( ) ) ) 
3348+ 											} , 
3349+ 										} ; 
3350+ 										handle_errors. push ( ( counterparty_node_id,  err) ) ; 
3351+ 										continue ; 
3352+ 									} 
3353+ 								} ; 
3354+ 								match  self . chain_monitor . update_channel ( chan. get ( ) . get_funding_txo ( ) . unwrap ( ) ,  monitor_update)  { 
3355+ 									ChannelMonitorUpdateStatus :: Completed  => { } , 
3356+ 									e => { 
3357+ 										handle_errors. push ( ( chan. get ( ) . get_counterparty_node_id ( ) ,  handle_monitor_update_res ! ( self ,  e,  chan,  RAACommitmentOrder :: CommitmentFirst ,  false ,  true ) ) ) ; 
3358+ 										continue ; 
3359+ 									} 
33543360								} 
3361+ 								log_debug ! ( self . logger,  "Forwarding HTLCs resulted in a commitment update with {} HTLCs added and {} HTLCs failed for channel {}" , 
3362+ 									add_htlc_msgs. len( ) ,  fail_htlc_msgs. len( ) ,  log_bytes!( chan. get( ) . channel_id( ) ) ) ; 
3363+ 								channel_state. pending_msg_events . push ( events:: MessageSendEvent :: UpdateHTLCs  { 
3364+ 									node_id :  chan. get ( ) . get_counterparty_node_id ( ) , 
3365+ 									updates :  msgs:: CommitmentUpdate  { 
3366+ 										update_add_htlcs :  add_htlc_msgs, 
3367+ 										update_fulfill_htlcs :  Vec :: new ( ) , 
3368+ 										update_fail_htlcs :  fail_htlc_msgs, 
3369+ 										update_fail_malformed_htlcs :  Vec :: new ( ) , 
3370+ 										update_fee :  None , 
3371+ 										commitment_signed :  commitment_msg, 
3372+ 									} , 
3373+ 								} ) ; 
33553374							} 
3356- 							log_debug ! ( self . logger,  "Forwarding HTLCs resulted in a commitment update with {} HTLCs added and {} HTLCs failed for channel {}" , 
3357- 								add_htlc_msgs. len( ) ,  fail_htlc_msgs. len( ) ,  log_bytes!( chan. get( ) . channel_id( ) ) ) ; 
3358- 							channel_state. pending_msg_events . push ( events:: MessageSendEvent :: UpdateHTLCs  { 
3359- 								node_id :  chan. get ( ) . get_counterparty_node_id ( ) , 
3360- 								updates :  msgs:: CommitmentUpdate  { 
3361- 									update_add_htlcs :  add_htlc_msgs, 
3362- 									update_fulfill_htlcs :  Vec :: new ( ) , 
3363- 									update_fail_htlcs :  fail_htlc_msgs, 
3364- 									update_fail_malformed_htlcs :  Vec :: new ( ) , 
3365- 									update_fee :  None , 
3366- 									commitment_signed :  commitment_msg, 
3367- 								} , 
3368- 							} ) ; 
33693375						} 
3370- 					}  else  { 
3371- 						forwarding_channel_not_found ! ( ) ; 
3372- 						continue ; 
33733376					} 
33743377				}  else  { 
33753378					for  forward_info in  pending_forwards. drain ( ..)  { 
0 commit comments