CoAP, как понять Опции

Форматирование пакета CoAP

[RFC 7252 CoAP] [1]

В RFC 7252, раздел 3, рисунок 7, третья строка, байты 9 ... 16 или больше, это поле Options. Я не могу найти ничего, что указывало бы на длину поля параметров. Я понимаю, что это может измениться, но в отличие от поля Token, длина которого указана полем TKL, я не могу распознать, где указана длина параметров.

Да, я вижу разделы 3.1 и 3.2, но не могу понять, что они мне говорят. В документе указывается ссылка на предыдущие варианты. Хорошо, что вы делаете для первого сообщения, в котором нет предыдущего пакета и предыдущей опции?

Когда моему коду необходимо отправить сообщение CoAP, как мне определить, какие варианты можно отправить? Какие значения необходимо загрузить в пакет для отправки, например, без параметров?


person bkelly    schedule 26.10.2017    source источник


Ответы (1)


Если вы видите рисунок 8 в разделе 3.1 RFC, биты 4-7 обозначают длину значения параметра.

     0   1   2   3   4   5   6   7
   +---------------+---------------+
   |  Option Delta | Option Length |   1 byte
   +---------------+---------------+

Биты 0–3 сообщают вам, какой это вариант. Этот полубайт дает вам только дельту по сравнению с предыдущей опцией, закодированной в этом сообщении. Для первой опции в сообщении предыдущей опции нет, поэтому биты 0–3 дают вам номер опции.

Давайте рассмотрим пример, в котором вам нужно закодировать 2 опции Uri-Port со значением 7000 и Uri-Path со значением /temp в сообщении CoAP. Опции всегда кодируются в порядке возрастания номеров опций. Итак, вы сначала кодируете Uri-Port с номером опции 7, а затем Uri-Path с номером опции 11.

Uri-Port, так как это первая опция в сообщении, дельта опций будет такой же, как номер опции, поэтому Option delta = 0x7. Значение порта 7000 займет 2 байтов (0x1B58), поэтому Option length = 0x2. Таким образом, этот вариант будет закодирован как 72 1b 58.

Uri-Path Это не первый вариант в этом сообщении. Дельта опций для этой опции будет this option number - prev option number, то есть 11 - 7 = 4. Кодирование temp займет 4 байта, поэтому Option length = 4. Таким образом, этот параметр будет закодирован как 44 74 65 6d 70

Обратите внимание, что это было для упрощенного случая, когда номер и длина опции не превышают 12 байтов. Когда любой из них превышает 12 байт, вы кодируете с использованием расширенной опции delta / length, как указано в RFC.

person yeniv    schedule 27.10.2017
comment
Вы сделали мой день! - person Claudio Pomo; 29.01.2018