@@ -2994,6 +2994,29 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
29942994 Ok ( ( ) )
29952995 }
29962996
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+
29973020 fn internal_channel_reestablish ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelReestablish ) -> Result < ( ) , MsgHandleErrInternal > {
29983021 let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
29993022 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
35173540 let _ = handle_error ! ( self , self . internal_announcement_signatures( counterparty_node_id, msg) , * counterparty_node_id) ;
35183541 }
35193542
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+
35203548 fn handle_channel_reestablish ( & self , counterparty_node_id : & PublicKey , msg : & msgs:: ChannelReestablish ) {
35213549 let _persistence_guard = PersistenceNotifierGuard :: new ( & self . total_consistency_lock , & self . persistence_notifier ) ;
35223550 let _ = handle_error ! ( self , self . internal_channel_reestablish( counterparty_node_id, msg) , * counterparty_node_id) ;
0 commit comments