wip
This commit is contained in:
+4
-4
@@ -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
@@ -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,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
@@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user