type WebResponseData = ();
+#[throws(PacketError)]
+pub fn route_packet(packet: Box<[u8]>, daddr: IpAddr) {
+ trace!("xxx discarding packet daddr={:?} len={}", daddr, packet.len());
+}
+
async fn handle(
all_clients: Arc<AllClients>,
req: hyper::Request<hyper::Body>
{
struct Outstanding {
reply_to: tokio::sync::oneshot::Sender<WebResponse>,
+ oi: OutstandingInner,
+ }
+ #[derive(Debug)]
+ struct OutstandingInner {
target_requests_outstanding: u32,
}
let mut outstanding: VecDeque<Outstanding> = default();
if ! downbound.is_empty() {
outstanding.pop_front()
} else if let Some((i,_)) = outstanding.iter().enumerate().find({
- |(_,o)| outstanding.len() > o.target_requests_outstanding.sat()
+ |(_,o)| outstanding.len() > o.oi.target_requests_outstanding.sat()
}) {
Some(outstanding.remove(i).unwrap())
} else {
let server, client = Duration::from_secs(meta.need_parse()?);
}
+ meta!{
+ mtu, ( != ), client,
+ let server, client: u32 = meta.parse()?.unwrap_or(server);
+ }
+
meta!{
max_batch_down, (), min(client, server),
let server, client: u32 = meta.parse()?.unwrap_or(server);
if comp.name != PartName::d {
warnings.add(&format_args!("unexpected part {:?}", comp.name))?;
}
- dbg!(comp.name, DumpHex(comp.payload));
+ checkn(Mime2Slip, mtu, comp.payload, |header| {
+ let saddr = ip_packet_addr::<false>(header)?;
+ if saddr != ic.link.client.0 { throw!(PE::Src(saddr)) }
+ let daddr = ip_packet_addr::<true>(header)?;
+ Ok(daddr)
+ }, |(daddr,packet)| route_packet(daddr,packet),
+ |e| { let _xxx = warnings.add(&e); }
+ )?;
}
- Ok::<_,AE>(target_requests_outstanding)
+ let oi = OutstandingInner {
+ target_requests_outstanding,
+ };
+ Ok::<_,AE>(oi)
}.await {
- Ok(target_requests_outstanding) => {
- outstanding.push_back(Outstanding {
- reply_to,
- target_requests_outstanding,
- });
- },
+ Ok(oi) => outstanding.push_back(Outstanding { reply_to, oi }),
Err(e) => {
try_send_response(reply_to, WebResponse {
data: Err(e),