diff --git a/message/src/common/address.rs b/message/src/common/address.rs index 41d78a9e..e1cb8ec5 100644 --- a/message/src/common/address.rs +++ b/message/src/common/address.rs @@ -6,7 +6,7 @@ use ser::{ }; use common::{Port, IpAddress, Services}; -#[derive(Debug, Default, PartialEq)] +#[derive(Debug, Default, PartialEq, Clone)] pub struct NetAddress { pub services: Services, pub address: IpAddress, diff --git a/message/src/types/version.rs b/message/src/types/version.rs index 0a9a040b..c3b93069 100644 --- a/message/src/types/version.rs +++ b/message/src/types/version.rs @@ -8,7 +8,7 @@ use common::{NetAddress, Services}; use {Payload, MessageResult}; use serialization::deserialize_payload; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Clone)] pub enum Version { V0(V0), V106(V0, V106), @@ -94,7 +94,7 @@ impl Version { } } -#[derive(Debug, Default, PartialEq)] +#[derive(Debug, Default, PartialEq, Clone)] pub struct V0 { pub version: u32, pub services: Services, @@ -102,7 +102,7 @@ pub struct V0 { pub receiver: NetAddress, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Clone)] pub struct V106 { pub from: NetAddress, pub nonce: u64, @@ -110,7 +110,7 @@ pub struct V106 { pub start_height: i32, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Clone)] pub struct V70001 { pub relay: bool, } diff --git a/p2p/src/net/accept_connection.rs b/p2p/src/net/accept_connection.rs index c7120a15..4dbdfa47 100644 --- a/p2p/src/net/accept_connection.rs +++ b/p2p/src/net/accept_connection.rs @@ -36,9 +36,10 @@ impl Future for AcceptConnection { }; let connection = Connection { stream: stream.into(), - version: result.negotiated_version, - magic: self.magic, services: result.version.services(), + version: result.negotiated_version, + version_message: result.version, + magic: self.magic, address: self.address, }; Ok(Ok(connection).into()) diff --git a/p2p/src/net/connect.rs b/p2p/src/net/connect.rs index dda8e12d..53c40e02 100644 --- a/p2p/src/net/connect.rs +++ b/p2p/src/net/connect.rs @@ -60,9 +60,10 @@ impl Future for Connect { }; let connection = Connection { stream: stream.into(), - version: result.negotiated_version, - magic: self.magic, services: result.version.services(), + version: result.negotiated_version, + version_message: result.version, + magic: self.magic, address: self.address, }; (ConnectState::Connected, Async::Ready(Ok(connection))) diff --git a/p2p/src/net/connection.rs b/p2p/src/net/connection.rs index a3d55bcb..bebdc35e 100644 --- a/p2p/src/net/connection.rs +++ b/p2p/src/net/connection.rs @@ -1,11 +1,13 @@ use std::net; use network::Magic; use message::common::Services; +use message::types; use io::SharedTcpStream; pub struct Connection { pub stream: SharedTcpStream, pub version: u32, + pub version_message: types::Version, pub magic: Magic, pub services: Services, pub address: net::SocketAddr, diff --git a/p2p/src/net/connections.rs b/p2p/src/net/connections.rs index ed56eb9b..94894c82 100644 --- a/p2p/src/net/connections.rs +++ b/p2p/src/net/connections.rs @@ -55,6 +55,7 @@ impl Connections { address: connection.address, direction: direction, version: connection.version, + version_message: connection.version_message, magic: connection.magic, }; diff --git a/p2p/src/protocol/sync.rs b/p2p/src/protocol/sync.rs index 938952eb..9b079a71 100644 --- a/p2p/src/protocol/sync.rs +++ b/p2p/src/protocol/sync.rs @@ -181,20 +181,7 @@ impl SyncProtocol { impl Protocol for SyncProtocol { fn initialize(&mut self) { - // TODO - use message::common; - let version = types::Version::V0(types::version::V0 { - version: self.context.info().version, - services: common::Services::default(), - timestamp: 0, - receiver: common::NetAddress { - services: common::Services::default(), - address: common::IpAddress::from("127.0.0.1"), - port: common::Port::from(0), - }, - }); - - self.inbound_connection.start_sync_session(version); + self.inbound_connection.start_sync_session(self.context.info().version_message.clone()); } fn on_message(&mut self, command: &Command, payload: &Bytes) -> Result<(), Error> { diff --git a/p2p/src/util/peer.rs b/p2p/src/util/peer.rs index 3999835b..45f3e127 100644 --- a/p2p/src/util/peer.rs +++ b/p2p/src/util/peer.rs @@ -1,4 +1,5 @@ use std::net::SocketAddr; +use message::types; use network::Magic; pub type PeerId = usize; @@ -9,12 +10,13 @@ pub enum Direction { Outbound, } -#[derive(Debug, PartialEq, Eq, Clone)] +#[derive(Debug, PartialEq, Clone)] pub struct PeerInfo { pub id: PeerId, pub address: SocketAddr, pub direction: Direction, pub version: u32, + pub version_message: types::Version, pub magic: Magic, }