chiark / gitweb /
server wip meta
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 19:44:22 +0000 (20:44 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 19:44:28 +0000 (20:44 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/server.rs

index 1764470ba118ae8dc47c560a6161a1b20f13b79f..bb1c6d6736112d5f5af0ba3a9f00bbf11481cb9f 100644 (file)
@@ -280,53 +280,46 @@ async fn run_client(ic: Arc<InstanceConfig>,
             ).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 {