Feodor0090 / nnfp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NNFP

Протокол доступа к файловому серверу поверх TCP.

Протокол

Формат пакета

  • 4 байта - длина данных в пакете
  • 2 байта - тип пакета
  • блоб - данные пакета.

Примеры

00 00 00 00 00 03 - пустой пакет типа 0x0003.

00 00 00 02 00 6A 09 F3 - пакет типа 0x006A, передающий 2 байта данных: 0x09 и 0xF3.

Этап аутентификации

Клиент передаёт пакет типа 1. Данные - строка имени пользователя.

Сервер передаёт пакет типа 1 с массивом байт - соли для ключа.

Клиент передаёт пакет типа 2 с ключом с солью.

В случае успеха сервер ведёт себя так, будто получен запрос на список файлов по пути /.

В случае ошибки, сервер может вернуть пустой пакет типа 2.

Списки файлов

Клиент передаёт пакет типа 3. Данные - строка пути до каталога, например, /folder1/ для папки "folder1" в папке пользователя. Слеши обязательны.

Сервер может вернуть пустые пакеты типа 2, 6 или 7 в случае ошибок.

В случае успеха возвращается пакет типа 3. Данные - последовательность строк без разделителей. Каждая строка передаётся после её длины двумя байтами. Например, 0x0004 abc/ 0x0008 file.txt. Папки идут первыми. Пути локальные.

Выгрузка на сервер

Клиент отправляет пакет типа 5. Данные - путь, по которому будет создан файл.

Сервер может вернуть пустые пакеты типа 2, 6 или 7 в случае ошибок.

В случае успеха возвращается пакет типа 5. Данные - 4 байта, номер передачи.

Клиент посылает пакеты типа 254 с 4 байтами номерами передачи и затем фрагментом данных.

Передачу завершает клиент пакетом типа 255 с номером передачи.

Сервер не отправляет никаких пакетов по завершению передачи.

Скачивание с сервера

Клиент отправляет пакет типа 4. Данные - путь файла для скачки.

Сервер может вернуть пустые пакеты типа 2, 6 или 7 в случае ошибок.

В случае успеха возвращается пакет типа 4. Данные - 8 байт длины файла и 4 байта номера передачи.

Сервер посылает пакеты типа 254 с 4 байтами номерами передачи и затем фрагментом данных.

Передачу завершает сервер пакетом типа 255 без данных.

Закрытие соеднения

Клиент может отправить пустой пакет типа 0 (6 нолей) для закрытия соединения.

About


Languages

Language:C# 100.0%