feat(upload): read fixed-size upload prefix
This commit is contained in:
+1
-1
@@ -117,7 +117,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Читаем остальную часть буфера от 1 до конца общего заголовка
|
// Читаем остальную часть буфера от 1 до конца общего заголовка
|
||||||
self.stream.read_exact(&mut buffer[1..=HEADER_SIZE]).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 =
|
||||||
|
|||||||
+8
-8
@@ -80,14 +80,14 @@ pub struct UploadMetadata {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Добавить геттеры для `file_size` и `file_name`.
|
- [✔] Добавить геттеры для `file_size` и `file_name`.
|
||||||
- [ ] Добавить константу максимальной длины имени:
|
- [✔] Добавить константу максимальной длины имени:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
MAX_FILENAME_SIZE
|
MAX_RELATIVE_PATH_BYTES
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Пока не добавлять в структуру содержимое файла.
|
- [✔] Пока не добавлять в структуру содержимое файла.
|
||||||
|
|
||||||
### 5. Прочитать фиксированную часть метаданных
|
### 5. Прочитать фиксированную часть метаданных
|
||||||
|
|
||||||
@@ -98,10 +98,10 @@ file_size: 8 байт
|
|||||||
name_size: 2 байта
|
name_size: 2 байта
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] В `upload::handle()` создать буфер размером 10 байт.
|
- [✔] В `upload::handle()` создать буфер размером 10 байт.
|
||||||
- [ ] Прочитать в него ровно 10 байт через `read_exact()`.
|
- [✔] Прочитать в него ровно 10 байт через `read_exact()`.
|
||||||
- [ ] Пока вывести полученные байты.
|
- [✔] Пока вывести полученные байты.
|
||||||
- [ ] Проверить обрыв соединения внутри этих десяти байт.
|
- [✔] Проверить обрыв соединения внутри этих десяти байт.
|
||||||
|
|
||||||
Ожидаемый результат:
|
Ожидаемый результат:
|
||||||
|
|
||||||
|
|||||||
+31
-3
@@ -2,15 +2,43 @@ use tokio::{io::{self, AsyncReadExt}, net::TcpStream, stream};
|
|||||||
|
|
||||||
use crate::protocol::Header;
|
use crate::protocol::Header;
|
||||||
|
|
||||||
|
const UPLOAD_PREFIX_SIZE: usize = 10; //Размер префикса в UPLOAD
|
||||||
|
pub const MAX_RELATIVE_PATH_BYTES: usize = 128 * 1024; //Размер пути с именем
|
||||||
|
|
||||||
struct UploadMetadata {
|
struct UploadMetadata {
|
||||||
file_size: u64,
|
path_size: u64,
|
||||||
file_name: String,
|
file_name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UploadMetadata {
|
|
||||||
pub async fn handle(stream: &mut TcpStream, header: Header) -> io::Result<()> {
|
pub async fn handle(stream: &mut TcpStream, header: Header) -> io::Result<()> {
|
||||||
println!("Обработчик UPLOAD получил заголовок: {header:?}");
|
println!("Обработчик UPLOAD получил заголовок: {header:?}");
|
||||||
let filename_read=stream.read(&mut )
|
|
||||||
|
let mut prefix_buffer = [0_u8; UPLOAD_PREFIX_SIZE];
|
||||||
|
stream.read_exact(&mut buffer).await?;
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Получены {UPLOAD_PREFIX_SIZE} байт метаданных UPLOAD: {buffer:?}"
|
||||||
|
);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl UploadMetadata {
|
||||||
|
pub(crate) fn new(
|
||||||
|
file_size: u64,
|
||||||
|
relative_path: String,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
file_size,
|
||||||
|
relative_path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn file_size(&self) -> u64 {
|
||||||
|
self.file_size
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn relative_path(&self) -> &str {
|
||||||
|
&self.relative_path
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user