summaryrefslogtreecommitdiffstats
path: root/doc/proto.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/proto.txt')
-rwxr-xr-xdoc/proto.txt38
1 files changed, 31 insertions, 7 deletions
diff --git a/doc/proto.txt b/doc/proto.txt
index 0f05d6a..49cb4a0 100755
--- a/doc/proto.txt
+++ b/doc/proto.txt
@@ -47,7 +47,7 @@ UH - user hash - SHA224 хэш от сертификата пользоватеÐ
0x08 0x08 (UH вызывающего пользователя)
+++[запрос списка узлов] - клиент
-0x09 0x09 (2 случайных байта)
+0x09 0x09 (2 псевдослучайных байта)
+++[список узлов] - сервер
0x0A 0x0A -- см формат 0xA4
@@ -63,22 +63,46 @@ UH - user hash - SHA224 хэш от сертификата пользоватеÐ
Протокол обмена сообщениями (между клиентами через сервер(ы) ) |КЛИЕНТ-КЛИЕНТ|
++++[начало c2c соединения] - клиент клиенту
+0xCC 0xCC Ver_major Ver_minor - версия протокола клиента
+варианты ответа - 0x01,0x02
+
++++[список прямых адресов клиента]
+0x0B 0x0B -- см формат A4
+0xA0, 0xA1, 0xA1 - аналогично сообщениям n2n
+Если клиент настроен для приёма входящих прямых соединений между клиентами (минуя ноду), он может послать список своих адресов.
+Первыми в списке должны идти адреса локальной сети (если они есть) из подсетей 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8,
+чтобы клиенты, находящиеся в одной локальной сети могли соединиться напрямую. Далее следуют публичные адреса интернета.
+Если клиент находится за NAT и пробрасывает открытый порт на свой локальный адрес, в адресе должен быть указан внешний порт.
+ Получив анонс, другой клиент может создать соединение с этим адресом и закрыть соединение через ноду
+
++++[попытки прямого соединения провалились]
+0x0C 0x0C (2 псевдослучайных байта)
+отправляется инициатором, если он получил от вызываемого клиента список прямых адресов и все попытки подключения к полученным адресам оказались неуспешны.
+После получения этого сообщения вызываемый клиент начинает попытки подключения к прямым адресам инициатора, если от инициатора был получен список прямых
+адресов и прямые подключения разрешены настройками вызываемого
+
++++[переключение на прямое соединение]
+0x0D 0x0D (2 псевдослучайных байта)
+отправляется после успешного TLS хэндшейка на прямом соединении каждой из сторон по соединению через ноду, после отправки этого сообщения все следующие сообщения
+отправляются по прямому соединению, получатель сообщения соответственно ожидает следующие сообщения уже по прямому соединению.
+
+++[сообщение - текст в кодировке UTF8]
0x30 0x30 (длина сообщения в байтах- 2 байта в формате little-endian) сообщение в кодировке UTF8
+++[отчет о доставке предыдущего сообщения]
-0x40 0x40 (2 случайных байта)
+0x40 0x40 (2 псевдослучайных байта)
+++ [запрос на отправку файла]
0x50 0x50 (длина сообщения - 2 байта, 9..263) (размер файла - 8 байт) имя файла в UTF-8, 1 - 255 байт
+++ [подтверждение принятия файла]
-0x51 0x51 (2 случайных байта)
+0x51 0x51 (2 псевдослучайных байта)
после получения этого сообщения отправитель начинает отправку файла
+++ [отказ от приёма файла]
-0x52 0x52 (2 случайных байта)
+0x52 0x52 (2 псевдослучайных байта)
+++ [фрагмент файла]
0x53 0x53 (длина фрагмента - 2 байта, 0 - 65532) фрагмент файла
@@ -91,10 +115,10 @@ UH - user hash - SHA224 хэш от сертификата пользоватеÐ
Пинг
+++[пинг-запрос] - может быть отправлен любой стороной, как по управляющему соединению, так и по межклиентскому
-0x68 0x68 (2 случайных байта)
+0x68 0x68 (2 псевдослучайных байта)
+++[пинг-ответ]
-0x69 0x69 (2 случайных байта)
+0x69 0x69 (2 псевдослучайных байта)
@@ -128,7 +152,7 @@ UH - user hash - SHA224 хэш от сертификата пользоватеÐ
Размер всего пакета не превышает 64кб
+++[запрос списка узлов] @@@
-0x90 0x90 (2 случайных байта)
+0x90 0x90 (2 псевдослучайных байта)
+++[поиск клиента] - отправляется всем узлам. Узел-получатель отвечает на это сообщение, только если искомый UH найден среди локальных клиентов либо в кэше