@@ -2994,6 +2994,29 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
2994
2994
Ok ( ( ) )
2995
2995
}
2996
2996
2997
+ fn internal_channel_update ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelUpdate ) -> Result < ( ) , MsgHandleErrInternal > {
2998
+ let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
2999
+ let channel_state = & mut * channel_state_lock;
3000
+ let chan_id = match channel_state. short_to_id . get ( & msg. contents . short_channel_id ) {
3001
+ Some ( chan_id) => chan_id. clone ( ) ,
3002
+ None => {
3003
+ // It's not a local channel
3004
+ return Ok ( ( ) )
3005
+ }
3006
+ } ;
3007
+ match channel_state. by_id . entry ( chan_id) {
3008
+ hash_map:: Entry :: Occupied ( mut chan) => {
3009
+ if chan. get ( ) . get_counterparty_node_id ( ) != * counterparty_node_id {
3010
+ // TODO: see issue #153, need a consistent behavior on obnoxious behavior from random node
3011
+ return Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Got a message for a channel from the wrong node!" . to_owned ( ) , chan_id) ) ;
3012
+ }
3013
+ try_chan_entry ! ( self , chan. get_mut( ) . channel_update( & msg) , channel_state, chan) ;
3014
+ } ,
3015
+ hash_map:: Entry :: Vacant ( _) => unreachable ! ( )
3016
+ }
3017
+ Ok ( ( ) )
3018
+ }
3019
+
2997
3020
fn internal_channel_reestablish ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelReestablish ) -> Result < ( ) , MsgHandleErrInternal > {
2998
3021
let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
2999
3022
let channel_state = & mut * channel_state_lock;
@@ -3517,6 +3540,11 @@ impl<Signer: Sign, M: Deref + Sync + Send, T: Deref + Sync + Send, K: Deref + Sy
3517
3540
let _ = handle_error ! ( self , self . internal_announcement_signatures( counterparty_node_id, msg) , * counterparty_node_id) ;
3518
3541
}
3519
3542
3543
+ fn handle_channel_update ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelUpdate ) {
3544
+ let _persistence_guard = PersistenceNotifierGuard :: new ( & self . total_consistency_lock , & self . persistence_notifier ) ;
3545
+ let _ = handle_error ! ( self , self . internal_channel_update( counterparty_node_id, msg) , * counterparty_node_id) ;
3546
+ }
3547
+
3520
3548
fn handle_channel_reestablish ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelReestablish ) {
3521
3549
let _persistence_guard = PersistenceNotifierGuard :: new ( & self . total_consistency_lock , & self . persistence_notifier ) ;
3522
3550
let _ = handle_error ! ( self , self . internal_channel_reestablish( counterparty_node_id, msg) , * counterparty_node_id) ;
0 commit comments