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

index 1fd6695127ae2a2d3531856f0555632a8332bc47..1764470ba118ae8dc47c560a6161a1b20f13b79f 100644 (file)
@@ -215,6 +215,7 @@ async fn handle(
 }
 
 #[allow(unused_variables)] // xxx
+#[allow(unused_mut)] // xxx
 async fn run_client(ic: Arc<InstanceConfig>,
                     mut web: mpsc::Receiver<WebRequest>)
                     -> Result<Void, AE>
@@ -272,14 +273,60 @@ async fn run_client(ic: Arc<InstanceConfig>,
             &mut body
           ).await.context("read request body")?;
 
-          dbg!(whole_request.len());
-
-/*          
-
-          multipart::ComponentIterator::resume_mid_component(
-            &initial[initial_remaining..],
-  */          
-
+          let (meta, comps) =
+            multipart::ComponentIterator::resume_mid_component(
+              &whole_request[initial_remaining..],
+              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));
+            }
+              
+            throw!(anyhow!(
+ "target_requests_outstanding mismatch: client={} server={}",
+              target_requests_outstanding, 
+              ic.target_requests_outstanding
+            ))
+          }
+
+          if ic.
+*/
           Ok::<_,AE>(())
         }.await {
           Ok(()) => outstanding.push_back(Outstanding {