Select Git revision
open_with_linux.py
meta_datas.rs 3.19 KiB
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//! Sub module define WS2P controller meta datas
use crate::connection_state::WS2PConnectionState;
use crate::MySelfWs2pNode;
use dubp_currency_params::CurrencyName;
use dubp_documents::Blockstamp;
use dup_crypto::hashs::Hash;
use durs_network_documents::network_peer::PeerCardV11;
use durs_network_documents::NodeFullId;
use durs_ws2p_messages::v2::api_features::WS2PFeatures;
use durs_ws2p_messages::v2::connect::WS2Pv2ConnectType;
use std::time::SystemTime;
#[derive(Debug, Clone)]
/// WS2p Connection meta datas
pub struct WS2PControllerMetaDatas {
/// Local challenge
pub challenge: Hash,
/// connect type
pub connect_type: WS2Pv2ConnectType,
/// Count invalid messages
pub count_invalid_msgs: usize,
/// Currency name
pub currency: CurrencyName,
/// Controller creation time
pub creation_time: SystemTime,
/// Connection features
pub features: Option<WS2PFeatures>,
/// Timestamp of last received message
pub last_mess_time: SystemTime,
/// Local node properties
pub local_node: MySelfWs2pNode,
/// Remote connect type
pub remote_connect_type: Option<WS2Pv2ConnectType>,
/// Remote node datas
pub remote_node: Option<Ws2pRemoteNodeDatas>,
/// Indicator required for the anti-spam mechanism
pub spam_interval: bool,
/// Indicator required for the anti-spam mechanism
pub spam_counter: usize,
/// Connection state
pub state: WS2PConnectionState,
}
impl WS2PControllerMetaDatas {
/// Instanciate new WS2PControllerMetaDatas
pub fn new(
challenge: Hash,
connect_type: WS2Pv2ConnectType,
currency: CurrencyName,
local_node: MySelfWs2pNode,
) -> Self {
WS2PControllerMetaDatas {
challenge,
connect_type,
count_invalid_msgs: 0,
currency,
creation_time: SystemTime::now(),
features: None,
last_mess_time: SystemTime::now(),
local_node,
remote_connect_type: None,
remote_node: None,
spam_interval: false,
spam_counter: 0,
state: WS2PConnectionState::TryToOpenWS,
}
}
}
#[derive(Debug, Clone)]
/// WS2P remote node datas
pub struct Ws2pRemoteNodeDatas {
/// Remote challenge
pub challenge: Hash,
/// Remote current blockstamp
pub current_blockstamp: Option<Blockstamp>,
/// Remote peer card
pub peer_card: Option<PeerCardV11>,
/// Remote full id
pub remote_full_id: NodeFullId,
}