rlibdht/
lib.rs

1pub mod utils;
2pub mod messages;
3pub mod routing;
4pub mod kad;
5pub mod kademlia;
6pub mod refresh;
7pub mod rpc;
8pub extern crate rlibbencode;
9
10//MAYBE MAKE ROUTING TABLE A BASE SET - IE ABSTRACT - NOT TRAIT
11//echo -n "hello" >/dev/udp/localhost/8080
12//netcat -ul 8080
13//test --package kad4 --lib tests -- --nocapture
14
15//server redo - decrease arc mutexes...
16//possibly redo entire system regarding RPC
17
18#[cfg(test)]
19mod tests {
20
21    use std::net::{IpAddr, SocketAddr, ToSocketAddrs};
22    use std::thread::sleep;
23    use std::time::Duration;
24    use crate::kad::kademlia_base::KademliaBase;
25    use crate::kademlia::Kademlia;
26
27    #[test]
28    fn test() {
29        let kad = Kademlia::try_from("Kademlia").unwrap();
30        kad.get_routing_table().lock().unwrap().set_secure_only(false);
31        kad.get_server().lock().unwrap().set_allow_bogon(true);
32        //kad.bind(8080);
33        kad.join(8080, SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 8070)).unwrap();
34        //kad.join(6881, SocketAddr::new(resolve_hostname("router.sectorrent.com").unwrap(), 6881)).unwrap();
35
36        //kad.join_thread();
37
38        loop {
39            sleep(Duration::from_secs(10));
40            let routing_table = kad.get_routing_table().lock().unwrap();
41            println!("CONSENSUS: {}  {}  {}",
42                     routing_table.get_derived_uid().to_string(),
43                     routing_table.get_consensus_external_address().to_string(),
44                     routing_table.all_nodes().len());
45        }
46    }
47
48    fn resolve_hostname(hostname: &str) -> Result<IpAddr, std::io::Error> {
49        let addresses: Vec<SocketAddr> = (hostname, 0).to_socket_addrs()?.collect();
50        let ip_addresses: Vec<IpAddr> = addresses.into_iter().map(|addr| addr.ip()).collect();
51        Ok(*ip_addresses.get(0).unwrap())
52    }
53}