@@ -837,7 +837,7 @@ macro_rules! handle_error {
837
837
} ) ;
838
838
}
839
839
if let Some ( channel_id) = chan_id {
840
- $self. pending_events. lock( ) . unwrap( ) . push( events:: Event :: ChannelClosed { channel_id, err: ClosureDescriptor :: ProcessingError } ) ;
840
+ $self. pending_events. lock( ) . unwrap( ) . push( events:: Event :: ChannelClosed { channel_id, err: ClosureDescriptor :: ProcessingError { err : err . err . clone ( ) } } ) ;
841
841
}
842
842
}
843
843
@@ -1447,7 +1447,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1447
1447
}
1448
1448
}
1449
1449
1450
- fn force_close_channel_with_peer ( & self , channel_id : & [ u8 ; 32 ] , peer_node_id : Option < & PublicKey > ) -> Result < PublicKey , APIError > {
1450
+ fn force_close_channel_with_peer ( & self , channel_id : & [ u8 ; 32 ] , peer_node_id : Option < & PublicKey > , peer_msg : Option < & String > ) -> Result < PublicKey , APIError > {
1451
1451
let mut chan = {
1452
1452
let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
1453
1453
let channel_state = & mut * channel_state_lock;
@@ -1473,7 +1473,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1473
1473
msg : update
1474
1474
} ) ;
1475
1475
}
1476
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : * channel_id, err : ClosureDescriptor :: ForceClosed } ) ;
1476
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : * channel_id, err : ClosureDescriptor :: ForceClosed { peer_msg : if peer_msg . is_some ( ) { Some ( peer_msg . unwrap ( ) . clone ( ) ) } else { None } } } ) ;
1477
1477
1478
1478
Ok ( chan. get_counterparty_node_id ( ) )
1479
1479
}
@@ -1482,7 +1482,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1482
1482
/// the chain and rejecting new HTLCs on the given channel. Fails if channel_id is unknown to the manager.
1483
1483
pub fn force_close_channel ( & self , channel_id : & [ u8 ; 32 ] ) -> Result < ( ) , APIError > {
1484
1484
let _persistence_guard = PersistenceNotifierGuard :: notify_on_drop ( & self . total_consistency_lock , & self . persistence_notifier ) ;
1485
- match self . force_close_channel_with_peer ( channel_id, None ) {
1485
+ match self . force_close_channel_with_peer ( channel_id, None , None ) {
1486
1486
Ok ( counterparty_node_id) => {
1487
1487
self . channel_state . lock ( ) . unwrap ( ) . pending_msg_events . push (
1488
1488
events:: MessageSendEvent :: HandleError {
@@ -3556,6 +3556,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
3556
3556
msg : update
3557
3557
} ) ;
3558
3558
}
3559
+ //TODO: split between CounterpartyInitiated/LocallyInitiated
3559
3560
self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : msg. channel_id , err : ClosureDescriptor :: CooperativeClosure } ) ;
3560
3561
}
3561
3562
Ok ( ( ) )
@@ -3968,7 +3969,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
3968
3969
msg : update
3969
3970
} ) ;
3970
3971
}
3971
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: UnknownOnchainCommitment } ) ;
3972
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: CommitmentTxBroadcasted } ) ;
3972
3973
pending_msg_events. push ( events:: MessageSendEvent :: HandleError {
3973
3974
node_id : chan. get_counterparty_node_id ( ) ,
3974
3975
action : msgs:: ErrorAction :: SendErrorMessage {
@@ -4504,7 +4505,7 @@ where
4504
4505
msg : update
4505
4506
} ) ;
4506
4507
}
4507
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : channel. channel_id ( ) , err : ClosureDescriptor :: UnknownOnchainCommitment } ) ;
4508
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : channel. channel_id ( ) , err : ClosureDescriptor :: CommitmentTxBroadcasted } ) ;
4508
4509
pending_msg_events. push ( events:: MessageSendEvent :: HandleError {
4509
4510
node_id : channel. get_counterparty_node_id ( ) ,
4510
4511
action : msgs:: ErrorAction :: SendErrorMessage { msg : e } ,
@@ -4710,7 +4711,7 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
4710
4711
if let Some ( short_id) = chan. get_short_channel_id ( ) {
4711
4712
short_to_id. remove ( & short_id) ;
4712
4713
}
4713
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: ProcessingError } ) ;
4714
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: DisconnectedPeer } ) ;
4714
4715
return false ;
4715
4716
} else {
4716
4717
no_channels_remain = false ;
@@ -4801,12 +4802,12 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
4801
4802
for chan in self . list_channels ( ) {
4802
4803
if chan. counterparty . node_id == * counterparty_node_id {
4803
4804
// Untrusted messages from peer, we throw away the error if id points to a non-existent channel
4804
- let _ = self . force_close_channel_with_peer ( & chan. channel_id , Some ( counterparty_node_id) ) ;
4805
+ let _ = self . force_close_channel_with_peer ( & chan. channel_id , Some ( counterparty_node_id) , Some ( & msg . data ) ) ;
4805
4806
}
4806
4807
}
4807
4808
} else {
4808
4809
// Untrusted messages from peer, we throw away the error if id points to a non-existent channel
4809
- let _ = self . force_close_channel_with_peer ( & msg. channel_id , Some ( counterparty_node_id) ) ;
4810
+ let _ = self . force_close_channel_with_peer ( & msg. channel_id , Some ( counterparty_node_id) , None ) ;
4810
4811
}
4811
4812
}
4812
4813
}
0 commit comments