internet2 0.9.0

Rust implementation for the stack of Internet2 protocols
Documentation
use std::convert::TryFrom;
use std::net::{SocketAddr, TcpListener};
use std::str::FromStr;

use inet2_addr::{LocalNode, NodeAddr};
use internet2::session::BrontozaurSession;
use internet2::SendRecvMessage;
use secp256k1::Secp256k1;

#[test]
fn main() {
    let secp = Secp256k1::new();
    let node_rx = LocalNode::new(&secp);
    let node_tx = LocalNode::new(&secp);
    let node =
        NodeAddr::from_str(&format!("{}@127.0.0.1:59877", node_tx.node_id()))
            .unwrap();

    let rx = std::thread::spawn(move || receiver(&node_rx, node));
    let tx = std::thread::spawn(move || sender(&node_tx, node));

    tx.join().unwrap();
    rx.join().unwrap();
}

fn receiver(local_node: &LocalNode, node: NodeAddr) {
    std::thread::sleep(core::time::Duration::from_secs(1));
    let mut session =
        BrontozaurSession::connect(local_node.private_key(), node).unwrap();
    let msg = session.recv_raw_message().unwrap();
    assert_eq!(msg, b"Hello world");
    std::thread::sleep(core::time::Duration::from_secs(5));
}

fn sender(local_node: &LocalNode, node: NodeAddr) {
    let listener =
        TcpListener::bind(SocketAddr::try_from(node.addr).unwrap()).unwrap();
    let mut session =
        BrontozaurSession::accept(local_node.private_key(), &listener).unwrap();
    session.send_raw_message(b"Hello world").unwrap();
    std::thread::sleep(core::time::Duration::from_secs(3));
}