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