use crate::PeerId;
use crate::dht::core_engine::{DhtKey, NodeInfo};
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DhtMessage {
FindNode { target: DhtKey, count: usize },
Ping { timestamp: u64 },
Join { node_info: NodeInfo },
Leave { node_id: PeerId },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DhtResponse {
FindNodeReply {
nodes: Vec<NodeInfo>,
distances: Vec<u32>,
},
Pong {
timestamp: u64,
},
JoinAck {
routing_info: RoutingInfo,
neighbors: Vec<NodeInfo>,
},
LeaveAck {
confirmed: bool,
},
Error {
code: ErrorCode,
message: String,
retry_after: Option<Duration>,
},
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum ErrorCode {
Timeout,
ConnectionFailed,
InvalidMessage,
NodeNotFound,
Overloaded,
InternalError,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoutingInfo {
pub bootstrap_nodes: Vec<NodeInfo>,
pub network_size: usize,
pub protocol_version: u32,
}