chiark / gitweb /
server wip meta
[hippotat.git] / src / bin / server.rs
index d8bd514d893e939fe4f60e9fa7aeeee55373877a..1764470ba118ae8dc47c560a6161a1b20f13b79f 100644 (file)
@@ -115,7 +115,7 @@ async fn handle(
     else if let Some(start) = boundary_iter.next() { start + boundary.len() }
     else { throw!(anyhow!("initial boundary not found")) };
 
-    let comp = multipart::process_component
+    let comp = multipart::process_boundary
       (&mut warnings, &initial[start..], PartName::m)?
       .ok_or_else(|| anyhow!(r#"no "m" component"#))?;
 
@@ -123,7 +123,7 @@ async fn handle(
       r#"first multipart component must be name="m""#
     )) }
 
-    let mut meta = MetadataFieldIterator::new(comp.payload_start);
+    let mut meta = MetadataFieldIterator::new(comp.payload);
 
     let client: ClientName = meta.need_parse().context("client addr")?;
 
@@ -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 {