#[derive(Debug)]
pub struct Client {
ic: Arc<InstanceConfig>,
- web: tokio::sync::mpsc::Sender<WebRequest>,
+ web: mpsc::Sender<WebRequest>,
}
pub type RoutedPacket = Box<[u8]>; // not MIME data
length_hint: usize,
body: hyper::body::Body,
boundary_finder: multipart::BoundaryFinder,
- reply_to: tokio::sync::oneshot::Sender<WebResponse>,
+ reply_to: oneshot::Sender<WebResponse>,
warnings: Warnings,
conn: Arc<String>,
}
type WebResponseData = Vec<u8>;
#[throws(PacketError)]
-pub fn route_packet(_global: &Global,
- conn: &str, link: &dyn Display,
- packet: RoutedPacket, daddr: IpAddr)
+pub async fn route_packet(global: &Global,
+ conn: &str, link: &(dyn Display + Sync),
+ packet: RoutedPacket, daddr: IpAddr)
{
- // xxx
- trace!("{} {} discarding packet daddr={:?} len={}",
- conn, link, daddr, packet.len());
+ let c = &global.config;
+ let trace = |how| trace!("{} {} route {} daddr={:?} len={}",
+ conn, link, how, daddr, packet.len());
+
+ if daddr == c.vaddr || ! c.vnetwork.iter().any(|n| n.contains(&daddr)) {
+ trace("ipif inbound xxx discarding");
+ } else if daddr == c.vrelay {
+ trace("discard (relay)");
+ } else if let Some(_client) = global.all_clients.get(&ClientName(daddr)) {
+ trace("ipif route xxx discarding");
+ } else {
+ trace("discard (no client)");
+ }
}
async fn handle(
//eprintln!("boundary={:?} start={} name={:?} client={}",
// boundary, start, &comp.name, &client.ic);
- let (reply_to, reply_recv) = tokio::sync::oneshot::channel();
+ let (reply_to, reply_recv) = oneshot::channel();
trace!("{} {} request, Content-Length={}",
&conn, &client_name, length_hint);
let wreq = WebRequest {
-> Result<Void, AE>
{
struct Outstanding {
- reply_to: tokio::sync::oneshot::Sender<WebResponse>,
+ reply_to: oneshot::Sender<WebResponse>,
oi: OutstandingInner,
}
#[derive(Debug)]
let downbound: VecDeque<(/*xxx*/)> = default();
let try_send_response = |
- reply_to: tokio::sync::oneshot::Sender<WebResponse>,
+ reply_to: oneshot::Sender<WebResponse>,
response: WebResponse
| {
reply_to.send(response)
&global, &conn, &ic.link.client, daddr,packet
),
|e| Ok::<_,SlipFramesError<_>>({ warnings.add(&e)?; })
- )?;
+ ).await?;
}
let oi = OutstandingInner {