From 7eee565b186e7ccb1049a6c8c350b5ea887f6ed7 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin <win10@list.ru> Date: Sat, 26 Feb 2022 18:41:25 +0400 Subject: [PATCH] Added Content-Length header. (#46) Signed-off-by: Pavel Kirilin <win10@list.ru> --- Cargo.lock | 126 +++++++++++++++++++++------------- Cargo.toml | 5 +- src/config.rs | 8 +-- src/protocol/core/get_info.rs | 14 ++-- 4 files changed, 93 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 80b6847..cc866e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,7 +16,24 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "tokio-util", + "tokio-util 0.6.9", +] + +[[package]] +name = "actix-codec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "log", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util 0.7.0", ] [[package]] @@ -44,11 +61,11 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.0.0-rc.2" +version = "3.0.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0185d65352deeea60d92231708068c04dc64f1ab307a1a307206a47d5a45d3" +checksum = "512e43eb60683c4ea2d1183f20076c899b2977849b896d8a639a12bd4652dd6d" dependencies = [ - "actix-codec", + "actix-codec 0.5.0", "actix-rt", "actix-service", "actix-utils", @@ -91,9 +108,9 @@ dependencies = [ [[package]] name = "actix-router" -version = "0.5.0-rc.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6506dbef336634ff35d994d58daa0a412ea23751f15f9b4dcac4d594b1ed1f" +checksum = "eb60846b52c118f2f04a56cc90880a274271c489b2498623d58176f8ca21fa80" dependencies = [ "bytestring", "firestorm", @@ -159,7 +176,7 @@ version = "4.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83e3c85bc4116b69913b03f16cff8cade1212508fcd321847d9cfe3d3e41f991" dependencies = [ - "actix-codec", + "actix-codec 0.4.2", "actix-http", "actix-macros", "actix-router", @@ -308,9 +325,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "askama_escape" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1bb320f97e6edf9f756bf015900038e43c7700e059688e5724a928c8f3b8d5" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" [[package]] name = "async-task" @@ -515,9 +532,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" dependencies = [ "jobserver", ] @@ -579,7 +596,7 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "tokio-util", + "tokio-util 0.6.9", ] [[package]] @@ -709,11 +726,12 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4600d695eb3f6ce1cd44e6e291adceb2cc3ab12f20a33777ecd0bf6eba34e06" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" dependencies = [ "generic-array 0.14.5", + "typenum", ] [[package]] @@ -779,9 +797,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb780dce4f9a8f5c087362b3a4595936b2019e7c8b30f2c3e9a7e94e6ae9837" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer 0.10.2", "crypto-common", @@ -1062,9 +1080,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" dependencies = [ "cfg-if", "libc", @@ -1086,7 +1104,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util", + "tokio-util 0.6.9", "tracing", ] @@ -1181,9 +1199,9 @@ dependencies = [ [[package]] name = "http-range" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" [[package]] name = "httparse" @@ -1374,9 +1392,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.117" +version = "0.2.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" [[package]] name = "libm" @@ -1468,9 +1486,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" dependencies = [ "mime", "unicase", @@ -2192,7 +2210,7 @@ dependencies = [ "pin-project-lite", "sha1", "tokio", - "tokio-util", + "tokio-util 0.6.9", "url", ] @@ -2331,9 +2349,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4214023b1223d02a4aad9f0bb9828317634a56530870a2eaf7200a99c0c10f68" +checksum = "d37baa70cf8662d2ba1c1868c5983dda16ef32b105cce41fb5c47e72936a90b3" dependencies = [ "arrayvec", "num-traits", @@ -2355,7 +2373,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.5", + "semver 1.0.6", ] [[package]] @@ -2383,6 +2401,7 @@ dependencies = [ "chrono", "derive_more", "fern", + "futures", "httptest", "lapin", "lazy_static", @@ -2478,9 +2497,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7" +checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" [[package]] name = "semver-parser" @@ -2574,7 +2593,7 @@ checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.2", + "digest 0.10.3", ] [[package]] @@ -2673,9 +2692,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518be6f6fff5ca76f985d434f9c37f3662af279642acf730388f271dff7b9016" +checksum = "195183bf6ff8328bb82c0511a83faf60aacf75840103388851db61d7a9854ae3" dependencies = [ "ahash", "atoi", @@ -2687,9 +2706,7 @@ dependencies = [ "bytes", "chrono", "crc", - "crossbeam-channel", "crossbeam-queue", - "crossbeam-utils", "digest 0.9.0", "dirs", "either", @@ -2713,7 +2730,7 @@ dependencies = [ "memchr", "num-bigint", "once_cell", - "parking_lot 0.11.2", + "paste", "percent-encoding", "rand 0.8.5", "regex", @@ -2740,9 +2757,9 @@ dependencies = [ [[package]] name = "sqlx-rt" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8061cbaa91ee75041514f67a09398c65a64efed72c90151ecd47593bad53da99" +checksum = "b555e70fbbf84e269ec3858b7a6515bcfe7a166a7cc9c636dd6efd20431678b6" dependencies = [ "actix-rt", "once_cell", @@ -3055,19 +3072,20 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" +checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" dependencies = [ "bytes", "libc", "memchr", - "mio 0.7.14", + "mio 0.8.0", "num_cpus", "once_cell", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "pin-project-lite", "signal-hook-registry", + "socket2", "winapi", ] @@ -3128,6 +3146,20 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-util" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64910e1b9c1901aaf5375561e35b9c057d95ff41a44ede043a03e09279eabaf1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + [[package]] name = "tower-service" version = "0.3.1" @@ -3136,9 +3168,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" dependencies = [ "cfg-if", "pin-project-lite", @@ -3487,9 +3519,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81e8f13fef10b63c06356d65d416b070798ddabcadc10d3ece0c5be9b3c7eddb" +checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 7b45c67..0a616dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,9 @@ strfmt = "^0.1.6" thiserror = "^1.0" url = "2.2.2" +[dependencies.futures] +version = "0.3.21" + [dependencies.serde] version = "1" features = ["derive"] @@ -29,7 +32,7 @@ features = ["vendored"] version = "0.6.0-beta.13" [dependencies.actix-web] -version = "^4.0.0-beta.20" +version = "^4.0.0-rc.3" [dependencies.chrono] features = ["serde"] diff --git a/src/config.rs b/src/config.rs index f772c6f..07cd41e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -213,9 +213,7 @@ impl RustusConf { pub fn base_url(&self) -> String { format!( "/{}", - self.url - .strip_prefix('/') - .unwrap_or_else(|| self.url.as_str()) + self.url.strip_prefix('/').unwrap_or(self.url.as_str()) ) } @@ -225,9 +223,7 @@ impl RustusConf { let base_url = self.base_url(); format!( "{}/{}", - base_url - .strip_suffix('/') - .unwrap_or_else(|| base_url.as_str()), + base_url.strip_suffix('/').unwrap_or(base_url.as_str()), file_id ) } diff --git a/src/protocol/core/get_info.rs b/src/protocol/core/get_info.rs index bc8cc8a..8daf5d6 100644 --- a/src/protocol/core/get_info.rs +++ b/src/protocol/core/get_info.rs @@ -1,6 +1,6 @@ -use actix_web::{web, HttpRequest, HttpResponse}; - use crate::errors::RustusError; +use actix_web::{web, HttpRequest, HttpResponse}; +use futures::stream::empty; use crate::{RustusResult, State}; @@ -47,18 +47,20 @@ pub async fn get_file_info( } builder .no_chunking(file_info.offset as u64) - .insert_header(("Upload-Offset", file_info.offset.to_string())) - .insert_header(("Content-Length", file_info.offset.to_string())); + .insert_header(("Upload-Offset", file_info.offset.to_string())); // Upload length is known. if let Some(upload_len) = file_info.length { - builder.insert_header(("Upload-Length", upload_len.to_string())); + builder + .no_chunking(upload_len as u64) + .insert_header(("Content-Length", file_info.offset.to_string())) + .insert_header(("Upload-Length", upload_len.to_string())); } else { builder.insert_header(("Upload-Defer-Length", "1")); } if let Some(meta) = file_info.get_metadata_string() { builder.insert_header(("Upload-Metadata", meta)); } - Ok(builder.finish()) + Ok(builder.streaming(empty::<RustusResult<web::Bytes>>())) } #[cfg(test)] -- GitLab