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