diff --git a/src/context.rs b/src/context.rs index 95e40ed..debb24e 100644 --- a/src/context.rs +++ b/src/context.rs @@ -4,6 +4,7 @@ use crate::event::Event; use log::{trace, debug, info, warn, error}; pub struct Context { + pub app_version: String, pub settings: Settings, pub keystore: Keystore, pub chain: Chain, @@ -13,8 +14,8 @@ pub struct Context { impl Context { /// Creating an essential context to work with - pub fn new(settings: Settings, keystore: Keystore, chain: Chain) -> Context { - Context { settings, keystore, chain, x_zones: ExternalZones::new(), bus: Bus::new() } + pub fn new(app_version: String, settings: Settings, keystore: Keystore, chain: Chain) -> Context { + Context { app_version, settings, keystore, chain, x_zones: ExternalZones::new(), bus: Bus::new() } } /// Load keystore and return Context diff --git a/src/main.rs b/src/main.rs index b002e8b..d77508c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -71,7 +71,11 @@ fn main() { None => { SETTINGS_FILENAME.to_owned() } Some(path) => { path } }; - SimpleLogger::new().with_level(level).with_module_level("mio::poll", LevelFilter::Warn).init().unwrap(); + SimpleLogger::new() + .with_level(level) + .with_module_level("mio::poll", LevelFilter::Warn) + .init() + .unwrap(); info!(target: LOG_TARGET_MAIN, "Starting ALFIS {}", env!("CARGO_PKG_VERSION")); let settings = Settings::load(&config_name); @@ -98,7 +102,7 @@ fn main() { Some(block) => { trace!(target: LOG_TARGET_MAIN, "Loaded DB with origin {:?}", &block.hash); } } let settings_copy = settings.clone(); - let context: Arc> = Arc::new(Mutex::new(Context::new(settings, keystore, chain))); + let context: Arc> = Arc::new(Mutex::new(Context::new(env!("CARGO_PKG_VERSION").to_owned(), settings, keystore, chain))); dns_utils::start_dns_server(&context, &settings_copy); let mut miner_obj = Miner::new(context.clone()); diff --git a/src/p2p/message.rs b/src/p2p/message.rs index 3ae6fba..dd072b4 100644 --- a/src/p2p/message.rs +++ b/src/p2p/message.rs @@ -7,7 +7,7 @@ use crate::Bytes; #[derive(Debug, Serialize, Deserialize)] pub enum Message { Error, - Hand { origin: String, version: u32, public: bool, #[serde(default)] rand: String }, + Hand { #[serde(default = "default_version")] app_version: String, origin: String, version: u32, public: bool, #[serde(default)] rand: String }, Shake { origin: String, version: u32, ok: bool, height: u64 }, Ping { height: u64, hash: Bytes }, Pong { height: u64, hash: Bytes }, @@ -26,8 +26,8 @@ impl Message { } } - pub fn hand(origin: &str, version: u32, public: bool, rand: &str) -> Self { - Message::Hand { origin: origin.to_owned(), version, public, rand: rand.to_owned() } + pub fn hand(app_version: &str, origin: &str, version: u32, public: bool, rand: &str) -> Self { + Message::Hand { app_version: app_version.to_owned(), origin: origin.to_owned(), version, public, rand: rand.to_owned() } } pub fn shake(origin: &str, version: u32, ok: bool, height: u64) -> Self { @@ -47,6 +47,10 @@ impl Message { } } +fn default_version() -> String { + String::from("0.0.0") +} + #[cfg(test)] mod tests { use crate::p2p::Message; diff --git a/src/p2p/network.rs b/src/p2p/network.rs index e150451..3ea95da 100644 --- a/src/p2p/network.rs +++ b/src/p2p/network.rs @@ -187,7 +187,7 @@ fn handle_connection_event(context: Arc>, peers: &mut Peers, regi debug!("Sending hello to {}", &peer.get_addr()); let data: String = { let c = context.lock().unwrap(); - let message = Message::hand(&c.settings.origin, CHAIN_VERSION, c.settings.public, peer.get_rand()); + let message = Message::hand(&c.app_version, &c.settings.origin, CHAIN_VERSION, c.settings.public, peer.get_rand()); serde_json::to_string(&message).unwrap() }; send_message(peer.get_stream(), &data.into_bytes()).unwrap_or_else(|e| warn!("Error sending hello {}", e)); @@ -279,7 +279,8 @@ fn handle_message(context: Arc>, message: Message, peers: &mut Pe (context.chain.height(), context.chain.last_hash(), &context.settings.origin.clone(), CHAIN_VERSION) }; match message { - Message::Hand { origin, version, public, rand} => { + Message::Hand { app_version, origin, version, public, rand} => { + debug!("Hello from v{}", &app_version); if peers.is_our_own_connect(&rand) { warn!("Detected loop connect"); State::Error diff --git a/src/p2p/peers.rs b/src/p2p/peers.rs index 8aac57e..5c5eb80 100644 --- a/src/p2p/peers.rs +++ b/src/p2p/peers.rs @@ -234,7 +234,7 @@ impl Peers { let addr = peer.get_addr(); match TcpStream::connect(addr.clone()) { Ok(mut stream) => { - info!("Created connection to peer {}, state = {:?}", &addr, peer.get_state()); + info!("Created connection to peer {}", &addr); registry.register(&mut stream, token.clone(), Interest::WRITABLE).unwrap(); peer.set_state(State::Connecting); peer.set_stream(stream);