@@ -804,7 +804,7 @@ macro_rules! handle_error {
804
804
} ) ;
805
805
}
806
806
if let Some ( channel_id) = chan_id {
807
- $self. pending_events. lock( ) . unwrap( ) . push( events:: Event :: ChannelClosed { channel_id, err: ClosureDescriptor :: ProcessingError } ) ;
807
+ $self. pending_events. lock( ) . unwrap( ) . push( events:: Event :: ChannelClosed { channel_id, err: ClosureDescriptor :: ProcessingError { err : err . err . clone ( ) } } ) ;
808
808
}
809
809
}
810
810
@@ -1414,7 +1414,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1414
1414
}
1415
1415
}
1416
1416
1417
- fn force_close_channel_with_peer ( & self , channel_id : & [ u8 ; 32 ] , peer_node_id : Option < & PublicKey > ) -> Result < PublicKey , APIError > {
1417
+ fn force_close_channel_with_peer ( & self , channel_id : & [ u8 ; 32 ] , peer_node_id : Option < & PublicKey > , peer_msg : Option < & String > ) -> Result < PublicKey , APIError > {
1418
1418
let mut chan = {
1419
1419
let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
1420
1420
let channel_state = & mut * channel_state_lock;
@@ -1440,7 +1440,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1440
1440
msg : update
1441
1441
} ) ;
1442
1442
}
1443
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : * channel_id, err : ClosureDescriptor :: ForceClosed } ) ;
1443
+ 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 } } } ) ;
1444
1444
1445
1445
Ok ( chan. get_counterparty_node_id ( ) )
1446
1446
}
@@ -1449,7 +1449,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1449
1449
/// the chain and rejecting new HTLCs on the given channel. Fails if channel_id is unknown to the manager.
1450
1450
pub fn force_close_channel ( & self , channel_id : & [ u8 ; 32 ] ) -> Result < ( ) , APIError > {
1451
1451
let _persistence_guard = PersistenceNotifierGuard :: notify_on_drop ( & self . total_consistency_lock , & self . persistence_notifier ) ;
1452
- match self . force_close_channel_with_peer ( channel_id, None ) {
1452
+ match self . force_close_channel_with_peer ( channel_id, None , None ) {
1453
1453
Ok ( counterparty_node_id) => {
1454
1454
self . channel_state . lock ( ) . unwrap ( ) . pending_msg_events . push (
1455
1455
events:: MessageSendEvent :: HandleError {
@@ -3506,6 +3506,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
3506
3506
msg : update
3507
3507
} ) ;
3508
3508
}
3509
+ //TODO: split between CounterpartyInitiated/LocallyInitiated
3509
3510
self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : msg. channel_id , err : ClosureDescriptor :: CooperativeClosure } ) ;
3510
3511
}
3511
3512
Ok ( ( ) )
@@ -3917,7 +3918,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
3917
3918
msg : update
3918
3919
} ) ;
3919
3920
}
3920
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: UnknownOnchainCommitment } ) ;
3921
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: CommitmentTxBroadcasted } ) ;
3921
3922
pending_msg_events. push ( events:: MessageSendEvent :: HandleError {
3922
3923
node_id : chan. get_counterparty_node_id ( ) ,
3923
3924
action : msgs:: ErrorAction :: SendErrorMessage {
@@ -4453,7 +4454,7 @@ where
4453
4454
msg : update
4454
4455
} ) ;
4455
4456
}
4456
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : channel. channel_id ( ) , err : ClosureDescriptor :: UnknownOnchainCommitment } ) ;
4457
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : channel. channel_id ( ) , err : ClosureDescriptor :: CommitmentTxBroadcasted } ) ;
4457
4458
pending_msg_events. push ( events:: MessageSendEvent :: HandleError {
4458
4459
node_id : channel. get_counterparty_node_id ( ) ,
4459
4460
action : msgs:: ErrorAction :: SendErrorMessage { msg : e } ,
@@ -4659,7 +4660,7 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
4659
4660
if let Some ( short_id) = chan. get_short_channel_id ( ) {
4660
4661
short_to_id. remove ( & short_id) ;
4661
4662
}
4662
- self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: ProcessingError } ) ;
4663
+ self . pending_events . lock ( ) . unwrap ( ) . push ( events:: Event :: ChannelClosed { channel_id : chan. channel_id ( ) , err : ClosureDescriptor :: DisconnectedPeer } ) ;
4663
4664
return false ;
4664
4665
} else {
4665
4666
no_channels_remain = false ;
@@ -4751,12 +4752,12 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
4751
4752
for chan in self . list_channels ( ) {
4752
4753
if chan. counterparty . node_id == * counterparty_node_id {
4753
4754
// Untrusted messages from peer, we throw away the error if id points to a non-existent channel
4754
- let _ = self . force_close_channel_with_peer ( & chan. channel_id , Some ( counterparty_node_id) ) ;
4755
+ let _ = self . force_close_channel_with_peer ( & chan. channel_id , Some ( counterparty_node_id) , Some ( & msg . data ) ) ;
4755
4756
}
4756
4757
}
4757
4758
} else {
4758
4759
// Untrusted messages from peer, we throw away the error if id points to a non-existent channel
4759
- let _ = self . force_close_channel_with_peer ( & msg. channel_id , Some ( counterparty_node_id) ) ;
4760
+ let _ = self . force_close_channel_with_peer ( & msg. channel_id , Some ( counterparty_node_id) , None ) ;
4760
4761
}
4761
4762
}
4762
4763
}
0 commit comments