diff options
| -rwxr-xr-x | PICA_proto.h | 28 | ||||
| -rwxr-xr-x | doc/proto.txt | 44 |
2 files changed, 37 insertions, 35 deletions
diff --git a/PICA_proto.h b/PICA_proto.h index 5062be9..d6b26bf 100755 --- a/PICA_proto.h +++ b/PICA_proto.h @@ -5,7 +5,7 @@ #define PICA_PROTO_VER_HIGH 0 -#define PICA_PROTO_VER_LOW 3 +#define PICA_PROTO_VER_LOW 4 #define PICA_PROTO_VER_STRING PICA_STRINGIFY2(PICA_PROTO_VER_HIGH, PICA_PROTO_VER_LOW) #define PICA_STRINGIFY2(H, L) PICA_STRINGIFY(H, L) @@ -55,15 +55,15 @@ #define PICA_PROTO_INITRESPOK_SIZE 4 #define PICA_PROTO_VERDIFFER_SIZE 4 -#define PICA_PROTO_CONNREQOUTG_SIZE 6 -#define PICA_PROTO_CONNREQINC_SIZE 6 -#define PICA_PROTO_NOTFOUND_SIZE 6 -#define PICA_PROTO_CONNALLOW_SIZE 6 -#define PICA_PROTO_FOUND_SIZE 6 -#define PICA_PROTO_CONNDENY_SIZE 6 +#define PICA_PROTO_CONNREQOUTG_SIZE 30 +#define PICA_PROTO_CONNREQINC_SIZE 30 +#define PICA_PROTO_NOTFOUND_SIZE 30 +#define PICA_PROTO_CONNALLOW_SIZE 30 +#define PICA_PROTO_FOUND_SIZE 30 +#define PICA_PROTO_CONNDENY_SIZE 30 #define PICA_PROTO_CLNODELISTREQ_SIZE 4 -#define PICA_PROTO_CONNID_SIZE 10 +#define PICA_PROTO_CONNID_SIZE 58 #define PICA_PROTO_MSGOK_SIZE 4 @@ -81,13 +81,13 @@ #define PICA_PROTO_NODELISTREQ_SIZE 4 -#define PICA_PROTO_SEARCH_SIZE 6 -#define PICA_PROTO_N2NFOUND_SIZE 6 -#define PICA_PROTO_N2NCONNREQOUTG_SIZE 10 -#define PICA_PROTO_N2NALLOW_SIZE 10 -#define PICA_PROTO_N2NNOTFOUND_SIZE 10 +#define PICA_PROTO_SEARCH_SIZE 30 +#define PICA_PROTO_N2NFOUND_SIZE 30 +#define PICA_PROTO_N2NCONNREQOUTG_SIZE 58 +#define PICA_PROTO_N2NALLOW_SIZE 58 +#define PICA_PROTO_N2NNOTFOUND_SIZE 58 -#define PICA_PROTO_N2NMSG_MAXDATASIZE 65524 +#define PICA_PROTO_N2NMSG_MAXDATASIZE 65476 #define PICA_PROTO_C2CMSG_MAXDATASIZE 65532 diff --git a/doc/proto.txt b/doc/proto.txt index 1390698..cc4fa71 100755 --- a/doc/proto.txt +++ b/doc/proto.txt @@ -3,6 +3,8 @@ [Хвост] - остальная часть пакета. Может быть пустым. Имеет либо фиксированную длину, заданную для данного сообщения, либо содержит в начале 1 или 2 байта, содержащих размер (в виде целого беззнакового числа, порядок байт-младший байт по младшему адресу) остальной части, не включая байты размера +UH - user hash - SHA224 хэш от сертификата пользователя в DER формате, 28 байт, является идентификатором пользователя + Протокол авторизации и пересылки данных (между сервером и клиентом) +++[запрос на подключение] -клиент @@ -25,24 +27,24 @@ |КЛИЕНТ-СЕРВЕР| +++[запрос на установление соединения с собеседником] - клиент, по установленному защищенному соединению -0x03 0x03 (UIN вызываемого пользователя, в формате little-endian) +0x03 0x03 (UH вызываемого пользователя) +++[запрос на разрешение соединения] - сервер, по установленному защищенному соединению -0x04 0x04 (UIN инициатора, в формате little-endian) +0x04 0x04 (UH инициатора) -+++[пользователь с данным UIN не найден (в оффлайне, отказался от разговора)] ++++[пользователь с данным UH не найден (в оффлайне, отказался от разговора)] - сервер, по установленному защищенному соединению -0x05 0x05 (UIN вызываемого пользователя, в формате little-endian) +0x05 0x05 (UH вызываемого пользователя) +++[разрешение соединения от вызываемого пользователя] -вызываемый клиент, по установленному защищенному соединению -0x06 0x06 (UIN вызывающего пользователя, в формате little-endian) +0x06 0x06 (UH вызывающего пользователя) после отправки данного сообщения вызваемый клиент осуществляет подключение к серверу на порт обмена данными (_DATA_PORT) и отправляет через это соединение сообщение 0x20 -идентификация нового соединения -+++[пользователь с данным UIN найден и готов общаться] - сервер вызывающему клиенту -0x07 0x07 (UIN вызываемого пользователя, в формате little-endian) ++++[пользователь с данным UH найден и готов общаться] - сервер вызывающему клиенту +0x07 0x07 (UH вызываемого пользователя) +++[отказ от общения]-вызываемый клиент -0x08 0x08 (UIN вызывающего пользователя, в формате little-endian) +0x08 0x08 (UH вызывающего пользователя) +++[запрос списка узлов] - клиент 0x09 0x09 (2 случайных байта) @@ -53,9 +55,9 @@ Нижеследующие сообщения передаются через соединение сервера с клиентом для передачи данных +++[идентификация нового соединения] - клиент -0x20 0x20 (UIN вызывающего пользователя) (UIN вызываемого пользователя) +0x20 0x20 (UH вызывающего пользователя) (UH вызываемого пользователя) -сервер при получении данного сообщения проверяет UINы. При несовпадении соединение разрывается. После проверки сервер переходит в режим пересылки данных между двумя клиентами. Вызывающий клиент инициирует установку соединения по протоколу TLS +сервер при получении данного сообщения проверяет UH-ы. При несовпадении соединение разрывается. После проверки сервер переходит в режим пересылки данных между двумя клиентами. Вызывающий клиент инициирует установку соединения по протоколу TLS @@ -111,30 +113,30 @@ 0x90 0x90 (2 случайных байта) -+++[поиск клиента] - отправляется всем узлам. Узел-получатель отвечает на это сообщение, только если искомый UIN найден среди локальных клиентов либо в кэше -0xA5 0xA5 (UIN вызываемого пользователя, в формате little-endian) ++++[поиск клиента] - отправляется всем узлам. Узел-получатель отвечает на это сообщение, только если искомый UH найден среди локальных клиентов либо в кэше +0xA5 0xA5 (UH вызываемого пользователя) -+++[результат поиска клиента-клиент найден ] - отправляется узлом, получившим 0xA5, если искомый UIN найден среди локальных подключенных клиентов -0xA8 0xA8 (UIN вызываемого пользователя, в формате little-endian) ++++[результат поиска клиента-клиент найден ] - отправляется узлом, получившим 0xA5, если искомый UH найден среди локальных подключенных клиентов +0xA8 0xA8 (UH вызываемого пользователя) -+++[результат поиска клиента-клиент найден в кэше ] - отправляется узлом, получившим 0xA5, если искомый UIN найден в кэше (т.е есть информация о подключении искомого клиента к другому узлу) -0xA9 0xA9 (размер - два байта, [13-263] )(UIN вызываемого пользователя, в формате little-endian) (адрес узла, на котором может быть искомый UIN, в формате A0|A1|A2 см. описание 0xA4) ++++[результат поиска клиента-клиент найден в кэше ] - отправляется узлом, получившим 0xA5, если искомый UH найден в кэше (т.е есть информация о подключении искомого клиента к другому узлу) +0xA9 0xA9 (размер - два байта, [32-287] )(UH вызываемого пользователя) (адрес узла, на котором может быть искомый UH, в формате A0|A1|A2 см. описание 0xA4) +++[запрос на разрешение соединения c клиентом узла-получателя] -0xAA 0xAA (UIN инициатора, в формате little-endian) (UIN вызываемого пользователя, в формате little-endian) +0xAA 0xAA (UH инициатора) (UH вызываемого пользователя) +++[разрешение соединения от вызываемого пользователя]-отправляется после того, как вызываемый локальный клиент ответил сообщением 0x06 и создал новое соединение для обмена сообщениями -0xAB 0xAB (UIN инициатора, в формате little-endian) (UIN вызываемого пользователя, в формате little-endian) +0xAB 0xAB (UH инициатора) (UH вызываемого пользователя) +++[клиент не найден (в оффлайне, отказался от разговора)] -отправляется узлом в ответ на сообщение 0xD0, адресованное данному UIN-у, +отправляется узлом в ответ на сообщение 0xD0, адресованное данному UH-у, если данный пользователь уже отключился или его нету в списке локальных клиентов, либо в ответ на 0xAA, если вызываемый клиент отказался от соединения. -0xB8 0xB8 (UIN инициатора, в формате little-endian)(UIN вызываемого пользователя, в формате little-endian) +0xB8 0xB8 (UH инициатора)(UH вызываемого пользователя) +++[сообщение, передаваемое клиентами между узлами] -0xD0 0xD0 (длина вложенного сообщения в байтах [8 - 65532] , - 2 байта в формате little-endian) (UIN локального пользователя-отправителя) (UIN пользователя на другом узле) вложенные данные +0xD0 0xD0 (длина вложенного сообщения в байтах [56 - 65532] , - 2 байта в формате little-endian) (UH локального пользователя-отправителя) (UH пользователя на другом узле) вложенные данные вложенные данные - данные передаваемые через соединение КЛИЕНТ-КЛИЕНТ |
