// boundary, start, &comp.name, &client.ic);
let (reply_to, reply_recv) = tokio::sync::oneshot::channel();
+ trace!("{} request xxx={}", &client.ic, initial.len());
let wreq = WebRequest {
initial,
initial_remaining,
warnings: mem::take(&mut warnings),
reply_to
};
- trace!("{} request", &client.ic);
client.web.try_send(wreq)
.map_err(|_| anyhow!("client task shut down!"))?;
match async {
+ let initial_used = initial.len() - initial_remaining;
+
let whole_request = read_limited_bytes(
ic.max_batch_up.sat(),
initial,
let (meta, comps) =
multipart::ComponentIterator::resume_mid_component(
- &whole_request[initial_remaining..],
+ &whole_request[initial_used..],
boundary_finder
).context("resume parsing body, after auth checks")?;
let mut meta = MetadataFieldIterator::new(&meta);
-/*
- macro_rules!(
-
- let target_requests_outstanding = {
- let server = ic.target_requests_outstanding;
- let client: u32 = meta.need_parse()?;
- if client != server {
- throw!(anyhow!("mismatch: client={} != server={}",
- client, server));
- }
- Ok::<_,AE>(client)
- }.context("target_requests_outstanding")?;
-
- let http_timeout: u64 = {
- let server = ic.http_timeout;
- let client = Duration::from_secs(meta.need_parse()?);
- if client > server {
- throw!(anyhow!("mismatch: client={} > server={}",
- client, server));
- }
- Ok::<_,AE>(client)
- }.context("http_timeout")?;
-
- let max_batch_down = {
- let server = ic.max_batch_down;
- let client: u32 = meta.parse().context("max_batch_down")?;
- let to_use = min(client, server);
- Ok::<_,AE>(to_use)
- }.context("max_batch_down")?;
-
- let max_batch_up = {
- let server = ic.max_batch_up;
- let client = meta.parse().context("max_batch_up")?;
- if client > server {
- throw!(anyhow!("mismatch: client={} != server={}",
- client, server));
+
+ macro_rules! meta {
+ { $v:ident, ( $( $badcmp:tt )? ), $ret:expr,
+ let $server:ident, $client:ident $($code:tt)*
+ } => {
+ let $v = (||{
+ let $server = ic.$v;
+ let $client $($code)*
+ $(
+ if $client $badcmp $server {
+ throw!(anyhow!("mismatch: client={:?} {} server={:?}",
+ $client, stringify!($badcmp), $server));
+ }
+ )?
+ Ok::<_,AE>($ret)
+ })().context(stringify!($v))?;
+ dbg!(&$v);
}
-
- throw!(anyhow!(
- "target_requests_outstanding mismatch: client={} server={}",
- target_requests_outstanding,
- ic.target_requests_outstanding
- ))
}
- if ic.
-*/
+ meta!{
+ target_requests_outstanding, ( != ), client,
+ let server, client: u32 = meta.need_parse()?;
+ }
+
+ meta!{
+ http_timeout, ( > ), client,
+ let server, client = Duration::from_secs(meta.need_parse()?);
+ }
+
+ meta!{
+ max_batch_down, (), min(client, server),
+ let server, client: u32 = meta.parse()?.unwrap_or(server);
+ }
+
+ meta!{
+ max_batch_up, ( > ), client,
+ let server, client = meta.parse()?.unwrap_or(server);
+ }
+
Ok::<_,AE>(())
}.await {
Ok(()) => outstanding.push_back(Outstanding {