Print old state on updates
[dnsseed-rust] / src / main.rs
index 86d394d62108345417f418d5d46d7416d37d3dc9..94c7ab813ab00ff41a65eca0eaf7cbcc03712adc 100644 (file)
@@ -139,11 +139,13 @@ pub fn scan_node(scan_time: Instant, node: SocketAddr) {
                                                state_lock.recvd_addrs = false;
                                                return future::err(());
                                        }
-                                       if let Err(_) = write.try_send(NetworkMessage::GetData(vec![Inventory {
-                                               inv_type: InvType::WitnessBlock,
-                                               hash: state_lock.request.1,
-                                       }])) {
-                                               return future::err(());
+                                       if !state_lock.recvd_addrs {
+                                               if let Err(_) = write.try_send(NetworkMessage::GetData(vec![Inventory {
+                                                       inv_type: InvType::WitnessBlock,
+                                                       hash: state_lock.request.1,
+                                               }])) {
+                                                       return future::err(());
+                                               }
                                        }
                                        state_lock.recvd_addrs = true;
                                        unsafe { DATA_STORE.as_ref().unwrap() }.add_fresh_nodes(&addrs);
@@ -171,13 +173,15 @@ pub fn scan_node(scan_time: Instant, node: SocketAddr) {
                let state_lock = final_peer_state.lock().unwrap();
                if state_lock.recvd_version && state_lock.recvd_verack &&
                                state_lock.recvd_addrs && state_lock.recvd_block {
-                       if store.set_node_state(node, AddressState::Good, state_lock.node_services) && state_lock.msg.0 != "" {
-                               printer.add_line(state_lock.msg.0.clone(), state_lock.msg.1);
+                       let old_state = store.set_node_state(node, AddressState::Good, state_lock.node_services);
+                       if old_state != AddressState::Good && state_lock.msg.0 != "" {
+                               printer.add_line(state_lock.msg.0.clone() + " from " + old_state.to_str(), state_lock.msg.1);
                        }
                } else {
                        assert!(state_lock.fail_reason != AddressState::Good);
-                       if store.set_node_state(node, state_lock.fail_reason, 0) && state_lock.msg.0 != "" {
-                               printer.add_line(state_lock.msg.0.clone(), state_lock.msg.1);
+                       let old_state = store.set_node_state(node, state_lock.fail_reason, 0);
+                       if old_state != state_lock.fail_reason && state_lock.msg.0 != "" {
+                               printer.add_line(state_lock.msg.0.clone() + " from " + old_state.to_str(), state_lock.msg.1);
                        }
                }
                future::ok(())