«Container»
Любое сообщение IRC-IoT, кроме служебных (псевдо-канального уровня), начинается с т.н. «Container», который в свою очередь содержит поля:
mid (Message ID) уникальный идентификационный код сообщения.
o (Object) Дочерний вложенный уровень «Object»
Помимо обязательных полей заголовка, могут быть дополнительные составляющие optional header:
oc (Objects count) количество передаваемых объектов;
• ;Если поле отсутствует в сообщении, подразумевается, что оно равно 1
op (Objects passed) количество уже переданных объектов;
• Если поле отсутствует в сообщении, подразумевается, что оно равно 1
t (time) дата и время;
src (source address) адрес источника;
dst (destination address) адрес получателя;
ver (protocol version) версия IRC-IoT протокола;
• Текстовое поле, которое может содержать версию протокола, либо запрос на его публикацию
• В случае, если поле принимает значение "?", это означает что удаленная сторона запрашивает версию протокола
• При использовании данного поля допускается отсутствие поля "o" в обязательном заголовке «Container»
lst (request to resend lost data) запрос на повторную посылку потерянных данных;
(При использовании данного поля, поле "o" в обязательном заголовке «Container» должно отсутствовать)
c1 (проверка 1)
CRC-16
Проверка целостности «Contrainer», c полиномом A001;
• Дополнительное поле для проверки целостности IRC-IoT сообщений. Требует резервирования 12 дополнительных байт.
• Может быть включено в средах, не поддерживающих проверку целостности передаваемых сообщений по каналам связи.
c2 (проверка 2)
CRC-32
Проверка целостности «Contrainer»;
• Подобна "c1", но требует уже дополнительно 16 байт.
и любые другие поля, не описанные протоколом IRC-IoT, которые могут использоваться конкретными его реализациями, в целом не влияющими на работу протокола. Такие поля могут быть безболезненно проигнорированы.
Однако указанный набор полей всегда присутствует в описании объекта, даже если они (поля) не указаны явным образом. В таком случае они наследуются от вышестоящих объектов и в любом случае подразумеваются в описании каждого объекта. Соответствующие названия полей в реестрах зарезервированы. Данный список может расширяться в ходе развития протокола, и если Вы построили свою модификацию протокола и внесли в реестр зарезервированное название переменной, а при выходе новой версии IRC-IoT протокола возник конфликт, вам следует для совместимости поменять такое название на другое, во всех реестрах вашей IRC-IoT сети.
Каждый «Container», помимо полей заголовка, может содержать один или серию вложенных объектов «Object». В случае, если объект один, он именуется буквой «o», если объектов несколько, то серия заключается в квадратные скобки (массив в JSON), и уже
весь данный массив именуется как «o», вложенные в массив объекты не
именуются, и могут быть отличены друг от друга только по собственному полю «oid».
Пример:
{"mid": 123, "oc": 5, "op": 1,
*** optional header ***, "o": [
{ "oid": 1, *** object *** }, { "oid": 2, *** object *** }, ... ] }
© 2018–2020 Алексей Воронов, Все права защищены.
|