Таки нужна поддержка нескольких потоков событий
This commit is contained in:
parent
812465ec2e
commit
0c4e6cfcd1
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,7 +1,8 @@
|
|||||||
Data types/DATA TYPES.md
|
Data types/DATA TYPES.md
|
||||||
SPX/
|
SPX/
|
||||||
_something.md
|
_something.md
|
||||||
Sessions.md
|
|
||||||
LBM.md
|
LBM.md
|
||||||
Reserved LBM keys.md
|
Reserved LBM keys.md
|
||||||
Reserved events/
|
Reserved events/
|
||||||
|
Sessions.md
|
||||||
|
Streams.md
|
12
Events.md
12
Events.md
@ -18,26 +18,26 @@
|
|||||||
|
|
||||||
## Содержание и структура
|
## Содержание и структура
|
||||||
|
|
||||||
Все _события_ содержат идентификатор серверной сессии размером 4 байта. Подробнее про сессии - в [Sessions.md](Sessions.md).
|
Все _события_ содержат идентификатор _потока_ размером 4 байта. Подробнее - в [Streams.md](Streams.md).
|
||||||
|
|
||||||
_События_ в _шифрованном соединении_ содержат хэш, применённый к зашифрованному блобу (см. ниже). Этот хэш имеет размер равно или более 16 байт и подписан с помощью закрытого ключа подписи отправляющего. Он гарантирует достоверность содержания _события_ на уровне прямого подключения между двумя _узлами_. Используемые алгоритмы подписи и хэширования определяются на этапе рукопожатия.
|
_События_ в _шифрованном соединении_ содержат хэш, применённый к зашифрованному блобу (см. ниже). Этот хэш имеет размер равно или более 16 байт и подписан с помощью закрытого ключа подписи отправляющего. Он гарантирует достоверность содержания _события_ на уровне прямого подключения между двумя _узлами_. Используемые алгоритмы подписи и хэширования определяются на этапе рукопожатия.
|
||||||
|
|
||||||
Все _события_ содержат асинхронный идентификатор _события_, который является двухбайтным целым числом без знака и предназначен для определения отношения запросов к ответам при асинхронном обмене _событиями_.
|
Все _события_ содержат асинхронный идентификатор _события_, который является двухбайтным целым числом без знака и предназначен для определения отношения запросов к ответам при асинхронном обмене _событиями_ в конкретном _потоке_.
|
||||||
|
|
||||||
Все _события_ содержат тип (см. выше раздел "Категории и типы").
|
Все _события_ содержат тип (см. выше раздел "Категории и типы").
|
||||||
|
|
||||||
_События_ могут содержать полезную нагрузку, либо один нулевой байт, свидетельствующий о её отсутствии. Данная версия протокола не накладывает ограничений на формат полезной нагрузки, за исключением базовых событий, которые представлены данными в формате _LBM_. Описание всех предопределённых в базовом протоколе ключей ячеек _LBM_ доступно в [Reserved LBM keys.md](Reserved%20LBM%20keys.md). При использовании формата _LBM_, в полезную нагрузку могут добавляться шумовые данные. Неизвестные ключи при обработке полезной нагрузки игнорируются.
|
_События_ могут содержать полезную нагрузку, либо один нулевой байт, свидетельствующий о её отсутствии. Данная версия протокола не накладывает ограничений на формат полезной нагрузки, за исключением базовых событий, которые представлены данными в формате _LBM_. Описание всех предопределённых в базовом протоколе ключей ячеек _LBM_ доступно в [Reserved LBM keys.md](Reserved%20LBM%20keys.md). При использовании формата _LBM_, в полезную нагрузку могут добавляться шумовые данные. Неизвестные ключи при обработке полезной нагрузки игнорируются.
|
||||||
|
|
||||||
_События_ в _шифрованном соединении_ содержат блоб, зашифрованный с помощью актуального ключа сессии и утверждённого алгоритма симметричного шифрования. Этот блоб содержит асинхронный идентификатор, тип события и полезную нагрузку. В нешифрованном соединении, указанные поля находятся в "сыром" виде.
|
_События_ в _шифрованном соединении_ содержат блоб, зашифрованный с помощью актуального ключа _потока_ и утверждённого алгоритма симметричного шифрования. Этот блоб содержит асинхронный идентификатор, тип события и полезную нагрузку. В нешифрованном _соединении_, указанные поля находятся в "сыром" виде.
|
||||||
|
|
||||||
Исходя из всего вышеописанного, минимальный размер сериализованного в бинарный вид _события_ в нешифрованном соединении составляет 9 байт, а его итоговая структура выглядит следующим образом:
|
Исходя из всего вышеописанного, минимальный размер сериализованного в бинарный вид _события_ в нешифрованном _соединении_ составляет 9 байт, а его итоговая структура выглядит следующим образом:
|
||||||
|
|
||||||
`[Session ID: 4B][Async ID: 2B][Event Type: 2B][Payload: >0B]`
|
`[Stream ID: 4B][Async ID: 2B][Event Type: 2B][Payload: >0B]`
|
||||||
|
|
||||||
В свою очередь, _события_ в _шифрованном соединении_ имеют размер не менее 25-и байт и следующую структуру:
|
В свою очередь, _события_ в _шифрованном соединении_ имеют размер не менее 25-и байт и следующую структуру:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
[Session ID: 4B][Signed Hash: >=16B][Encrypted Blob: >=5B]
|
[Stream ID: 4B][Signed Hash: >=16B][Encrypted Blob: >=5B]
|
||||||
/ | \
|
/ | \
|
||||||
[Async ID: 2B][Event Type: 2B][Payload: >0B]
|
[Async ID: 2B][Event Type: 2B][Payload: >0B]
|
||||||
```
|
```
|
||||||
|
@ -143,3 +143,5 @@ ASCII: S t a d i u m P
|
|||||||
- _Тип:_ `char[]`
|
- _Тип:_ `char[]`
|
||||||
- _Обязательна:_ нет
|
- _Обязательна:_ нет
|
||||||
- Строка в кодировке ASCII, описывающая ошибку в человекочитаемом виде.
|
- Строка в кодировке ASCII, описывающая ошибку в человекочитаемом виде.
|
||||||
|
|
||||||
|
<!--TODO: стартовый SID-->
|
||||||
|
14
Overview.md
14
Overview.md
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Терминология
|
## Терминология
|
||||||
|
|
||||||
Здесь перечислены используемые в данной документации термины, значение которых может быть не очевидно и/или не соответствует тому, которое подразумевается обычно.
|
Здесь перечислены используемые в данной спецификации термины, значение которых может быть не очевидно и/или не соответствует тому, которое подразумевается обычно.
|
||||||
|
|
||||||
### Узел
|
### Узел
|
||||||
|
|
||||||
@ -18,9 +18,17 @@
|
|||||||
|
|
||||||
Выполняющий роль клиента _узел_ в многоранговой сети.
|
Выполняющий роль клиента _узел_ в многоранговой сети.
|
||||||
|
|
||||||
### Шифрованное соединение/сессия
|
### Соединение/поток
|
||||||
|
|
||||||
Соединение между двумя _узлами_, все _события_ в котором шифруются с помощью оговорённого симметричного алгоритма и ключа, а также подписываются с помощью известного приватного ключа подписи отправителя.
|
Канал обмена _событиями_ между двумя _узлами_, имеющий свой идентификатор (Stream ID/SID, см. [Streams.md](Streams.md)) и набор настроек.
|
||||||
|
|
||||||
|
### Шифрованное соединение/поток
|
||||||
|
|
||||||
|
_Соединение_ между двумя _узлами_, все _события_ в котором шифруются с помощью оговорённого симметричного алгоритма и ключа, а также подписываются с помощью приватного ключа отправителя.
|
||||||
|
|
||||||
|
### Сессия
|
||||||
|
|
||||||
|
То, что устанавливается при создании первого _соединения_ между двумя _узлами_, с чем ассоциированы конкретные _потоки_ и прочие параметры.
|
||||||
|
|
||||||
### Событие
|
### Событие
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user