use libwisp::{
WispContext, WispSetServer, WispSetConnectionType, WispClose,
ConnectionType, WispPktType, WispSendPkt, WispReadPkt
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut ctx = WispContext::new();
WispSetServer(&mut ctx, "wss://wispserver.dev/wisp/").await;
WispSetConnectionType(&mut ctx, ConnectionType::Tcp);
let stream_id: u32 = rand::random();
let mut connect_packet = Vec::new();
connect_packet.push(WispPktType::CONNECT as u8); connect_packet.extend(&stream_id.to_le_bytes()); connect_packet.push(ctx.conn_type as u8); connect_packet.extend(&(80u16).to_le_bytes()); connect_packet.extend("example.com".as_bytes()); WispSendPkt(&mut ctx, &connect_packet).await?;
let request = b"GET / HTTP/1.1\r\n\
Host: example.com\r\n\
Connection: close\r\n\
\r\n";
let mut data_packet = Vec::new();
data_packet.push(WispPktType::DATA as u8); data_packet.extend(&stream_id.to_le_bytes()); data_packet.extend(request); WispSendPkt(&mut ctx, &data_packet).await?;
let mut buffer = Vec::new();
match WispReadPkt(&mut ctx, &mut buffer).await {
Ok(size) => {
println!("Received {} bytes", size);
println!("{}", String::from_utf8_lossy(&buffer));
}
Err(e) => {
println!("Error reading response: {}", e);
}
}
WispClose(&mut ctx).await;
Ok(())
}