«Datum» – третий по уровню вложенности
JSON-объект в протоколе
IRC-IoT.
Он содержит непосредственные данные, структура которых задана
IRC-IoT
объектом «Object». Серия однотипных «Datum»
может передаваться в виде JSON-массива,
и иметь вид:
[ { *** Datum 1 *** }, { *** Datum 2 *** }, ... { *** Datum N *** } ]
По умолчанию, в каждом объекте «Datum» подразумевается поле «did»
– это признак "свёртывания", если элемент данных объекта обычный
(не состоит из множества фрагментов), то значение «did» равно нулю,
при этом отсутствие поля «did» подразумевает, что поле
«did» равно нулю.
Пример:
{"did": 0, ... followed part of *** Datum *** }
Если размер «Datum», заголовков («Container» опционально) и
«Object» в сумме более MML
байт (с учётом UTF-8), то генерируется необходимое число "связок"
«Container» + «Object», а «Datum»
содержит следующие поля:
did
(Datum ID) уникальный номер длинного элемента данных;
bc
(bytes count) количество байт (с учётом UTF-8) в передаваемых элементах данных;
bp
(bytes passed) количество уже переданных байт элементов данных;
ed
(encrypted Datum).
Пример:
{"did": 567, "bc": 100, "bp": 50, *** optional header *** ,
"ed": "abcedefghighklmnopqrst ... ddqewd"}
После применения функции decrypt_datum() над "склеенным" множеством всех частей
«multipart Datum» в свою очередь должна получиться «Datum»
"большого размера", в ней, в свою очередь, может лежать
«Container», «Object» или «Datum»,
каждый из таких блоков обрабатывается последовательно, по рекурсии,
с применением соответствующих алгоритмов протокола.
Таким образом, в одном «Container» и вложенном в него «Object»,
может находится:
1. Один обычный, "короткий" «Datum»;
2. Массив из серии обычных "коротких" «Datum»;
3. Одна из частей «multipart Datum», которая
при объединении с другими его частями, позволит получить "длинный"
«Datum», не помещающийся вместе с «Container» и
«Object» в MML байт.
Число MML (Maximum Message Length) определяется настройками
серверов IRC сети,
но по умолчанию принимается равным 510 байт. При этом необходимо
учитывать, что для кодирования символов в UTF-8 может потребоваться
как 1, так и 2 байта.