use std::net::UdpSocket;
use std::env;
use rsa::{RsaPrivateKey, RsaPublicKey, pkcs8::{FromPublicKey, FromPrivateKey}, PublicKeyParts};
use wgtk::net::bundle::BundleAssembler;
use wgtk::net::packet::Packet;
fn main() {
let pubkey_path = env::var("WGT_PUBKEY_PATH").unwrap();
let privkey_path = env::var("WGT_PRIVKEY_PATH").unwrap();
let pubkey_content = std::fs::read_to_string(pubkey_path).unwrap();
let privkey_content = std::fs::read_to_string(privkey_path).unwrap();
let pubkey = RsaPublicKey::from_public_key_pem(pubkey_content.as_str()).unwrap();
let privkey = RsaPrivateKey::from_pkcs8_pem(privkey_content.as_str()).unwrap();
println!("PUB RSA {} {:?}", pubkey.size() * 8, pubkey);
println!("PRIV RSA {} {:?}", privkey.size() * 8, privkey);
serv();
}
fn serv() {
let sock = UdpSocket::bind("127.0.0.1:9788").unwrap();
let mut bundle_asm = BundleAssembler::new(true);
loop {
let mut packet = Packet::new_boxed(true);
let (len, addr) = sock.recv_from(&mut packet.data).unwrap();
print!("[{}] Received {} bytes... ", addr, len);
if let Err(e) = packet.read_config(len, true) {
println!("Failed to decode: {:?}", e);
} else {
if let Some(bundle) = bundle_asm.try_assemble(addr, packet) {
println!("Completed a bundle: {}.", bundle.len());
} else {
println!("Just a fragment.");
}
}
}
}