@@ -1144,12 +1144,11 @@ impl From<LightningError> for MessageHandlingError {
11441144 }
11451145}
11461146
1147- macro_rules! encode_msg {
1148- ( $msg: expr) => { {
1149- let mut buffer = VecWriter ( Vec :: with_capacity( MSG_BUF_ALLOC_SIZE ) ) ;
1150- wire:: write( $msg, & mut buffer) . unwrap( ) ;
1151- buffer. 0
1152- } } ;
1147+ fn encode_message < T : wire:: Type > ( message : wire:: Message < T > ) -> Vec < u8 > {
1148+ let mut buffer = VecWriter ( Vec :: with_capacity ( MSG_BUF_ALLOC_SIZE ) ) ;
1149+ message. type_id ( ) . write ( & mut buffer) . expect ( "In-memory messages must never fail to serialize" ) ;
1150+ message. write ( & mut buffer) . expect ( "In-memory messages must never fail to serialize" ) ;
1151+ buffer. 0
11531152}
11541153
11551154impl < Descriptor : SocketDescriptor , CM : Deref , OM : Deref , L : Deref , NS : Deref , SM : Deref >
@@ -2068,7 +2067,7 @@ where
20682067 for msg in msgs_to_forward. drain ( ..) {
20692068 self . forward_broadcast_msg (
20702069 & * peers,
2071- & msg,
2070+ msg,
20722071 peer_node_id. as_ref ( ) . map ( |( pk, _) | pk) ,
20732072 false ,
20742073 ) ;
@@ -2661,22 +2660,25 @@ where
26612660 /// unless `allow_large_buffer` is set, in which case the message will be treated as critical
26622661 /// and delivered no matter the available buffer space.
26632662 fn forward_broadcast_msg (
2664- & self , peers : & HashMap < Descriptor , Mutex < Peer > > , msg : & BroadcastGossipMessage ,
2663+ & self , peers : & HashMap < Descriptor , Mutex < Peer > > , msg : BroadcastGossipMessage ,
26652664 except_node : Option < & PublicKey > , allow_large_buffer : bool ,
26662665 ) {
26672666 match msg {
2668- BroadcastGossipMessage :: ChannelAnnouncement ( ref msg) => {
2667+ BroadcastGossipMessage :: ChannelAnnouncement ( msg) => {
26692668 log_gossip ! ( self . logger, "Sending message to all peers except {:?} or the announced channel's counterparties: {:?}" , except_node, msg) ;
2670- let encoded_msg = encode_msg ! ( msg) ;
26712669 let our_channel = self . our_node_id == msg. contents . node_id_1
26722670 || self . our_node_id == msg. contents . node_id_2 ;
2673-
2671+ let scid = msg. contents . short_channel_id ;
2672+ let node_id_1 = msg. contents . node_id_1 ;
2673+ let node_id_2 = msg. contents . node_id_2 ;
2674+ let msg: Message < <CMH :: Target as CustomMessageReader >:: CustomMessage > =
2675+ Message :: ChannelAnnouncement ( msg) ;
2676+ let encoded_msg = encode_message ( msg) ;
26742677 for ( _, peer_mutex) in peers. iter ( ) {
26752678 let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
26762679 if !peer. handshake_complete ( ) {
26772680 continue ;
26782681 }
2679- let scid = msg. contents . short_channel_id ;
26802682 if !our_channel && !peer. should_forward_channel_announcement ( scid) {
26812683 continue ;
26822684 }
@@ -2693,9 +2695,7 @@ where
26932695 continue ;
26942696 }
26952697 if let Some ( ( _, their_node_id) ) = peer. their_node_id {
2696- if their_node_id == msg. contents . node_id_1
2697- || their_node_id == msg. contents . node_id_2
2698- {
2698+ if their_node_id == node_id_1 || their_node_id == node_id_2 {
26992699 continue ;
27002700 }
27012701 }
@@ -2708,23 +2708,25 @@ where
27082708 peer. gossip_broadcast_buffer . push_back ( encoded_message) ;
27092709 }
27102710 } ,
2711- BroadcastGossipMessage :: NodeAnnouncement ( ref msg) => {
2711+ BroadcastGossipMessage :: NodeAnnouncement ( msg) => {
27122712 log_gossip ! (
27132713 self . logger,
27142714 "Sending message to all peers except {:?} or the announced node: {:?}" ,
27152715 except_node,
27162716 msg
27172717 ) ;
2718- let encoded_msg = encode_msg ! ( msg) ;
27192718 let our_announcement = self . our_node_id == msg. contents . node_id ;
2719+ let msg_node_id = msg. contents . node_id ;
27202720
2721+ let msg: Message < <CMH :: Target as CustomMessageReader >:: CustomMessage > =
2722+ Message :: NodeAnnouncement ( msg) ;
2723+ let encoded_msg = encode_message ( msg) ;
27212724 for ( _, peer_mutex) in peers. iter ( ) {
27222725 let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
27232726 if !peer. handshake_complete ( ) {
27242727 continue ;
27252728 }
2726- let node_id = msg. contents . node_id ;
2727- if !our_announcement && !peer. should_forward_node_announcement ( node_id) {
2729+ if !our_announcement && !peer. should_forward_node_announcement ( msg_node_id) {
27282730 continue ;
27292731 }
27302732 debug_assert ! ( peer. their_node_id. is_some( ) ) ;
@@ -2740,7 +2742,7 @@ where
27402742 continue ;
27412743 }
27422744 if let Some ( ( _, their_node_id) ) = peer. their_node_id {
2743- if their_node_id == msg . contents . node_id {
2745+ if their_node_id == msg_node_id {
27442746 continue ;
27452747 }
27462748 }
@@ -2760,15 +2762,16 @@ where
27602762 except_node,
27612763 msg
27622764 ) ;
2763- let encoded_msg = encode_msg ! ( msg) ;
2764- let our_channel = self . our_node_id == * node_id_1 || self . our_node_id == * node_id_2;
2765-
2765+ let our_channel = self . our_node_id == node_id_1 || self . our_node_id == node_id_2;
2766+ let scid = msg. contents . short_channel_id ;
2767+ let msg: Message < <CMH :: Target as CustomMessageReader >:: CustomMessage > =
2768+ Message :: ChannelUpdate ( msg) ;
2769+ let encoded_msg = encode_message ( msg) ;
27662770 for ( _, peer_mutex) in peers. iter ( ) {
27672771 let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
27682772 if !peer. handshake_complete ( ) {
27692773 continue ;
27702774 }
2771- let scid = msg. contents . short_channel_id ;
27722775 if !our_channel && !peer. should_forward_channel_announcement ( scid) {
27732776 continue ;
27742777 }
@@ -3201,7 +3204,7 @@ where
32013204 let forward = BroadcastGossipMessage :: ChannelAnnouncement ( msg) ;
32023205 self . forward_broadcast_msg (
32033206 peers,
3204- & forward,
3207+ forward,
32053208 None ,
32063209 from_chan_handler,
32073210 ) ;
@@ -3222,7 +3225,7 @@ where
32223225 } ;
32233226 self . forward_broadcast_msg (
32243227 peers,
3225- & forward,
3228+ forward,
32263229 None ,
32273230 from_chan_handler,
32283231 ) ;
@@ -3246,7 +3249,7 @@ where
32463249 } ;
32473250 self . forward_broadcast_msg (
32483251 peers,
3249- & forward,
3252+ forward,
32503253 None ,
32513254 from_chan_handler,
32523255 ) ;
@@ -3265,7 +3268,7 @@ where
32653268 let forward = BroadcastGossipMessage :: NodeAnnouncement ( msg) ;
32663269 self . forward_broadcast_msg (
32673270 peers,
3268- & forward,
3271+ forward,
32693272 None ,
32703273 from_chan_handler,
32713274 ) ;
@@ -3742,7 +3745,7 @@ where
37423745 let _ = self . message_handler . route_handler . handle_node_announcement ( None , & msg) ;
37433746 self . forward_broadcast_msg (
37443747 & * self . peers . read ( ) . unwrap ( ) ,
3745- & BroadcastGossipMessage :: NodeAnnouncement ( msg) ,
3748+ BroadcastGossipMessage :: NodeAnnouncement ( msg) ,
37463749 None ,
37473750 true ,
37483751 ) ;
@@ -4557,7 +4560,8 @@ mod tests {
45574560 assert_eq ! ( peer. gossip_broadcast_buffer. len( ) , 1 ) ;
45584561
45594562 let pending_msg = & peer. gossip_broadcast_buffer [ 0 ] ;
4560- let expected = encode_msg ! ( & msg_100) ;
4563+ let msg: Message < ( ) > = Message :: ChannelUpdate ( msg_100) ;
4564+ let expected = encode_message ( msg) ;
45614565 assert_eq ! ( expected, pending_msg. fetch_encoded_msg_with_type_pfx( ) ) ;
45624566 }
45634567 }
0 commit comments