pub mod utils;
pub mod messages;
pub mod routing;
pub mod kad;
pub mod kademlia;
pub mod refresh;
pub mod rpc;
pub extern crate rlibbencode;
#[cfg(test)]
mod tests {
use std::net::{IpAddr, SocketAddr, ToSocketAddrs};
use std::thread::sleep;
use std::time::Duration;
use crate::kad::kademlia_base::KademliaBase;
use crate::kademlia::Kademlia;
#[test]
fn test() {
let kad = Kademlia::try_from("Kademlia").unwrap();
kad.get_routing_table().lock().unwrap().set_secure_only(false);
kad.get_server().lock().unwrap().set_allow_bogon(true);
kad.join(8080, SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 8070)).unwrap();
loop {
sleep(Duration::from_secs(10));
let routing_table = kad.get_routing_table().lock().unwrap();
println!("CONSENSUS: {} {} {}",
routing_table.get_derived_uid().to_string(),
routing_table.get_consensus_external_address().to_string(),
routing_table.all_nodes().len());
}
}
fn resolve_hostname(hostname: &str) -> Result<IpAddr, std::io::Error> {
let addresses: Vec<SocketAddr> = (hostname, 0).to_socket_addrs()?.collect();
let ip_addresses: Vec<IpAddr> = addresses.into_iter().map(|addr| addr.ip()).collect();
Ok(*ip_addresses.get(0).unwrap())
}
}