@@ -143,65 +143,66 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
143
143
let current_node_id = NodeId :: from_pubkey ( & current_pubkey) ;
144
144
node_ids. push ( current_pubkey) ;
145
145
146
- let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
147
- features : NodeFeatures :: empty ( ) ,
148
- timestamp : backdated_timestamp,
149
- node_id : current_node_id,
150
- rgb : [ 0 , 0 , 0 ] ,
151
- alias : NodeAlias ( [ 0u8 ; 32 ] ) ,
152
- addresses : Vec :: new ( ) ,
153
- excess_address_data : Vec :: new ( ) ,
154
- excess_data : Vec :: new ( ) ,
155
- } ;
156
-
157
- read_only_network_graph. nodes ( )
158
- . get ( & current_node_id)
159
- . and_then ( |node| node. announcement_info . as_ref ( ) )
160
- . map ( |info| {
161
- synthetic_node_announcement. features = info. features ( ) . clone ( ) ;
162
- synthetic_node_announcement. rgb = info. rgb ( ) . clone ( ) ;
163
- synthetic_node_announcement. alias = info. alias ( ) . clone ( ) ;
164
- synthetic_node_announcement. addresses = info. addresses ( ) . clone ( ) ;
165
- } ) ;
166
-
167
- if has_address_details {
168
- let address_count: u8 = Readable :: read ( read_cursor) ?;
169
- let mut node_addresses: Vec < SocketAddress > = Vec :: new ( ) ;
170
- for address_index in 0 ..address_count {
171
- let current_byte_count: u8 = Readable :: read ( read_cursor) ?;
172
- let mut address_reader = FixedLengthReader :: new ( & mut read_cursor, current_byte_count as u64 ) ;
173
- let mut address_bytes = Vec :: new ( ) ;
174
- address_reader. read_to_end ( & mut address_bytes) ?;
175
-
176
- let mut address_cursor = io:: Cursor :: new ( & address_bytes) ;
177
- if let Ok ( current_address) = Readable :: read ( & mut address_cursor) {
178
- node_addresses. push ( current_address) ;
179
- } else {
180
- // Do not crash to allow future socket address forwards compatibility
181
- log_gossip ! (
146
+
147
+ if has_address_details || feature_detail_marker > 0 {
148
+ let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
149
+ features : NodeFeatures :: empty ( ) ,
150
+ timestamp : backdated_timestamp,
151
+ node_id : current_node_id,
152
+ rgb : [ 0 , 0 , 0 ] ,
153
+ alias : NodeAlias ( [ 0u8 ; 32 ] ) ,
154
+ addresses : Vec :: new ( ) ,
155
+ excess_address_data : Vec :: new ( ) ,
156
+ excess_data : Vec :: new ( ) ,
157
+ } ;
158
+
159
+ read_only_network_graph. nodes ( )
160
+ . get ( & current_node_id)
161
+ . and_then ( |node| node. announcement_info . as_ref ( ) )
162
+ . map ( |info| {
163
+ synthetic_node_announcement. features = info. features ( ) . clone ( ) ;
164
+ synthetic_node_announcement. rgb = info. rgb ( ) . clone ( ) ;
165
+ synthetic_node_announcement. alias = info. alias ( ) . clone ( ) ;
166
+ synthetic_node_announcement. addresses = info. addresses ( ) . clone ( ) ;
167
+ } ) ;
168
+
169
+ if has_address_details {
170
+ let address_count: u8 = Readable :: read ( read_cursor) ?;
171
+ let mut node_addresses: Vec < SocketAddress > = Vec :: new ( ) ;
172
+ for address_index in 0 ..address_count {
173
+ let current_byte_count: u8 = Readable :: read ( read_cursor) ?;
174
+ let mut address_reader = FixedLengthReader :: new ( & mut read_cursor, current_byte_count as u64 ) ;
175
+ if let Ok ( current_address) = Readable :: read ( & mut address_reader) {
176
+ node_addresses. push ( current_address) ;
177
+ if address_reader. bytes_remain ( ) {
178
+ return Err ( DecodeError :: ShortRead . into ( ) ) ;
179
+ }
180
+ } else {
181
+ // Do not crash to allow future socket address forwards compatibility
182
+ log_gossip ! (
182
183
self . logger,
183
- "Failure to parse address at index {} for node ID {}: {:?} " ,
184
- address_index, current_node_id, address_bytes
184
+ "Failure to parse address at index {} for node ID {}" ,
185
+ address_index, current_node_id
185
186
) ;
187
+ address_reader. eat_remaining ( ) ?;
188
+ }
186
189
}
190
+ synthetic_node_announcement. addresses = node_addresses;
187
191
}
188
- synthetic_node_announcement. addresses = node_addresses;
189
- }
190
192
191
- if feature_detail_marker > 0 {
192
- if feature_detail_marker < 7 {
193
- let feature_index = ( feature_detail_marker - 1 ) as usize ;
194
- synthetic_node_announcement. features = default_node_features
195
- . get ( feature_index)
196
- . ok_or ( DecodeError :: InvalidValue ) ?
197
- . clone ( ) ;
198
- } else {
199
- let node_features: NodeFeatures = Readable :: read ( read_cursor) ?;
200
- synthetic_node_announcement. features = node_features;
193
+ if feature_detail_marker > 0 {
194
+ if feature_detail_marker < 7 {
195
+ let feature_index = ( feature_detail_marker - 1 ) as usize ;
196
+ synthetic_node_announcement. features = default_node_features
197
+ . get ( feature_index)
198
+ . ok_or ( DecodeError :: InvalidValue ) ?
199
+ . clone ( ) ;
200
+ } else {
201
+ let node_features: NodeFeatures = Readable :: read ( read_cursor) ?;
202
+ synthetic_node_announcement. features = node_features;
203
+ }
201
204
}
202
- }
203
205
204
- if feature_detail_marker > 0 || has_address_details {
205
206
node_modifications. push ( synthetic_node_announcement) ;
206
207
}
207
208
0 commit comments