chiark / gitweb /
read_limited_bytes: take an `initial` argument
[hippotat.git] / src / bin / server.rs
index e38b1176aa8cfd11e864a04a780a30b61e55aade..8c3c23efdec1222eadcd465a02ef4c67b575bab0 100644 (file)
@@ -85,7 +85,9 @@ async fn handle(
     };
 
     let mut body = req.into_body();
-    let initial = match read_limited_bytes(METADATA_MAX_LEN, &mut body).await {
+    let initial = match read_limited_bytes(
+      METADATA_MAX_LEN, default(), &mut body
+    ).await {
       Ok(all) => all,
       Err(ReadLimitedError::Truncated { sofar,.. }) => sofar,
       Err(ReadLimitedError::Hyper(e)) => throw!(e),
@@ -243,9 +245,25 @@ async fn run_client(_ic: Arc<InstanceConfig>,
           reply_to, warnings,
         } = req.ok_or_else(|| anyhow!("webservers all shut down!"))?;
 
-        match (||{
+        match async {
+
+          // xxx size limit
+
+          let whole_request = body.try_fold(
+            initial.into_vec(),
+            |mut w, by| async move { w.extend_from_slice(&by); Ok(w) },
+          ).await.context("read request body")?;
+
+          dbg!(whole_request.len());
+
+/*          
+
+          multipart::ComponentIterator::resume_mid_component(
+            &initial[initial_remaining..],
+  */          
+
           Ok::<_,AE>(())
-        })() {
+        }.await {
           Ok(()) => outstanding.push_back(Outstanding {
             reply_to: reply_to,
             max_requests_outstanding: 42, // xxx