This commit is contained in:
Stanislav N Mikhailov
2026-08-10 17:29:15 +03:00
parent e45b86cd20
commit 46f2721570
4 changed files with 21 additions and 17 deletions
+4 -4
View File
@@ -9,7 +9,7 @@ use tokio::{
}; };
use crate::{protocol::{ use crate::{protocol::{
Command, HEADER_SIZE, Header, MAX_BODY_SIZE, decode_header, Command, HEADER_SIZE, Header, decode_header,
}, upload}; }, upload};
struct IncomingMessage { struct IncomingMessage {
@@ -75,7 +75,7 @@ impl Connection {
format!("Ошибка UPLOAD:{error:}") format!("Ошибка UPLOAD:{error:}")
) )
} }
); )?;
} }
Command::Download => { Command::Download => {
@@ -116,8 +116,8 @@ impl Connection {
return Ok(None); return Ok(None);
} }
// Читаем остальную часть буфера от 1 до конца // Читаем остальную часть буфера от 1 до конца общего заголовка
self.stream.read_exact(&mut buffer[1..]).await?; self.stream.read_exact(&mut buffer[1..=HEADER_SIZE]).await?;
//Парсим скачанный заголовок через nocloud_core::protocol parse_header //Парсим скачанный заголовок через nocloud_core::protocol parse_header
let header = let header =
+4 -4
View File
@@ -60,18 +60,18 @@ pub async fn handle(
### 3. Убрать чтение всего тела в `Vec` ### 3. Убрать чтение всего тела в `Vec`
- [✔] Не вызывать текущий `read_body()` для команды `UPLOAD`. - [✔] Не вызывать текущий `read_body()` для команды `UPLOAD`.
- [ ] Не создавать: - [✔] Не создавать:
```rust ```rust
vec![0_u8; header.body_size() as usize] vec![0_u8; header.body_size() as usize]
``` ```
- [ ] Удалить или временно оставить `read_body()` только для будущих небольших команд. - [✔] Удалить или временно оставить `read_body()` только для будущих небольших команд.
- [ ] Убедиться, что `UPLOAD` получает поток, стоящий точно перед первым байтом тела. - [✔] Убедиться, что `UPLOAD` получает поток, стоящий точно перед первым байтом тела.
### 4. Описать метаданные загрузки ### 4. Описать метаданные загрузки
- [ ] В `protocol.rs` создать структуру: - [✔] В `protocol.rs` создать структуру:
```rust ```rust
pub struct UploadMetadata { pub struct UploadMetadata {
-1
View File
@@ -1,6 +1,5 @@
// Парсим заголовок на базе Nom // Парсим заголовок на базе Nom
pub const HEADER_SIZE: usize = 20; pub const HEADER_SIZE: usize = 20;
pub const MAX_BODY_SIZE: u64 = 1024 * 1024;
use nom::{ use nom::{
bytes::complete::tag, bytes::complete::tag,
+13 -8
View File
@@ -1,11 +1,16 @@
use tokio::{io, net::TcpStream, stream}; use tokio::{io::{self, AsyncReadExt}, net::TcpStream, stream};
use crate::protocol::Header; use crate::protocol::Header;
pub async fn handle( struct UploadMetadata {
stream: &mut TcpStream, file_size: u64,
header: Header, file_name: String,
) -> io::Result<()> { }
println!("Обработчик UPLOAD получил заголовок: {header:?}");
Ok(()) impl UploadMetadata {
} pub async fn handle(stream: &mut TcpStream, header: Header) -> io::Result<()> {
println!("Обработчик UPLOAD получил заголовок: {header:?}");
let filename_read=stream.read(&mut )
Ok(())
}
}