feat(upload): read fixed-size upload prefix
This commit is contained in:
+1
-1
@@ -117,7 +117,7 @@ impl Connection {
|
||||
}
|
||||
|
||||
// Читаем остальную часть буфера от 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
|
||||
let header =
|
||||
|
||||
+8
-8
@@ -80,14 +80,14 @@ pub struct UploadMetadata {
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] Добавить геттеры для `file_size` и `file_name`.
|
||||
- [ ] Добавить константу максимальной длины имени:
|
||||
- [✔] Добавить геттеры для `file_size` и `file_name`.
|
||||
- [✔] Добавить константу максимальной длины имени:
|
||||
|
||||
```rust
|
||||
MAX_FILENAME_SIZE
|
||||
MAX_RELATIVE_PATH_BYTES
|
||||
```
|
||||
|
||||
- [ ] Пока не добавлять в структуру содержимое файла.
|
||||
- [✔] Пока не добавлять в структуру содержимое файла.
|
||||
|
||||
### 5. Прочитать фиксированную часть метаданных
|
||||
|
||||
@@ -98,10 +98,10 @@ file_size: 8 байт
|
||||
name_size: 2 байта
|
||||
```
|
||||
|
||||
- [ ] В `upload::handle()` создать буфер размером 10 байт.
|
||||
- [ ] Прочитать в него ровно 10 байт через `read_exact()`.
|
||||
- [ ] Пока вывести полученные байты.
|
||||
- [ ] Проверить обрыв соединения внутри этих десяти байт.
|
||||
- [✔] В `upload::handle()` создать буфер размером 10 байт.
|
||||
- [✔] Прочитать в него ровно 10 байт через `read_exact()`.
|
||||
- [✔] Пока вывести полученные байты.
|
||||
- [✔] Проверить обрыв соединения внутри этих десяти байт.
|
||||
|
||||
Ожидаемый результат:
|
||||
|
||||
|
||||
+32
-4
@@ -2,15 +2,43 @@ use tokio::{io::{self, AsyncReadExt}, net::TcpStream, stream};
|
||||
|
||||
use crate::protocol::Header;
|
||||
|
||||
const UPLOAD_PREFIX_SIZE: usize = 10; //Размер префикса в UPLOAD
|
||||
pub const MAX_RELATIVE_PATH_BYTES: usize = 128 * 1024; //Размер пути с именем
|
||||
|
||||
struct UploadMetadata {
|
||||
file_size: u64,
|
||||
path_size: u64,
|
||||
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:?}");
|
||||
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(())
|
||||
}
|
||||
|
||||
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