Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:jroboplc:modules:jrbustcp-protocol [2020/12/22 21:34]
denis [01 - INIT]
doc:jroboplc:modules:jrbustcp-protocol [2022/01/27 13:35] (текущий)
denis [07 - AUTH_INIT]
Строка 53: Строка 53:
  
 ''​**flags**''​ - битовые параметры:​\\ ''​**flags**''​ - битовые параметры:​\\
-  * <​del>​b0 - не использовать описания тегов. Если 1, то описание тега в ответе команды LIST будет пустой строкой.</​del>​ **Внимание! Это ошибка,​ допущеная в предыдущей версии описания. Правильный вариант описания ''​b0''​ см. ниже.** 
   * ''​b0''​ - клиент поддерживает передачу описания тегов. Если b0 не установлен,​ то описания тегов в ответе команды ''​LIST''​ будут пустыми строками.   * ''​b0''​ - клиент поддерживает передачу описания тегов. Если b0 не установлен,​ то описания тегов в ответе команды ''​LIST''​ будут пустыми строками.
   * ''​b1''​ - клиент поддерживает передачу статусов тегов в ответе команды ''​READ''​.   * ''​b1''​ - клиент поддерживает передачу статусов тегов в ответе команды ''​READ''​.
Строка 153: Строка 152:
   ​   ​
  
 +===== 06 - CRC =====
 +Чтение CRC32 по всем текущим значениям тегов, зафиксированным командой UPDATE.
  
 +  request: 0x06
 +  answer: ​ 0x86  crc#4
 +  ​
 +''​**crc**''​ - контрольная сумма CRC32 всех значений тегов
  
 +Подсчет CRC выполняется последовательно по списку тегов, сформированному командой INIT. Значение каждого тега представляется в виде байтового массива,​ длина которого зависит от типа тега:
 +  * BOOL - 1 байт
 +  * INT - 4 байт
 +  * LONG - 8 байт
 +  * DOUBLE - 8 байт
 +  * STRING - 4 байт
 +
 +Старший байт значения суммируется первым.
 +
 +Для тегов типа STRING используется значение хэш-кода,​ расчитываемого следующим образом (java):
 +<code java>
 +public int hashCode() {
 +    int h = hash;
 +    if (h == 0 && value.length > 0) {
 +        char val[] = value;
 +        ​
 +        for (int i = 0; i < value.length;​ i++) {
 +            h = 31 * h + val[i];
 +        }
 +        hash = h;
 +    }
 +    return h;
 +}
 +</​code>​
 +При расчете хэш-кода используются значения символов строки в кодировке [[https://​www.utf8-chartable.de/​unicode-utf8-table.pl?​start=1024|UNICODE]].
 + 
 +
 +===== 07 - AUTH_INIT =====
 +Инициализация процесса аутентификации.
 +
 +  request: 0x07  klen#​2 ​ keyname#​klen
 +  answer: ​ 0x87  status#​1 ​ nlen#​2 ​ nonce#nlen
 +  ​
 +**''​klen''​** - длина строки keyname в байтах.
 +
 +**''​nlen''​** - длина строки nonce в байтах.
 +  ​
 +''​**keyname**''​ - имя файла приватного ключа, который будет использоваться на стороне клиента.
 +
 +''​**status**''​ - статус выполнения инициализации аутентификационного процесса на сервере:​
 +  0 - OK - процесс начат нормально,​ сформировано и зашифровано nonce (random-строка)
 +  1 - FAILED - процесс не начат, в nonce находится описание проблемы
 +  2 - DISABLED - аутентификация на сервере отключена,​ вход свободный
 +
 +''​**nonce**''​ - зашифрованное публичным ключем сгенерированное значение (строка случайных символов)
 +
 +Сервер должен иметь у себя соответствующий публичный ключ с именем файла ''​keyname.pub''​. После того, как клиент получил зашифрованный nonce, он должен расшифровать его своим приватным ключем ''​keyname''​ и отправить на сервер последующей командой AUTH_SUBMIT.
 +
 +
 +
 +===== 08 - AUTH_SUBMIT =====
 +Завершение процесса аутентификации.
 +
 +  request: 0x08  nlen#​2 ​ nonce#nlen
 +  answer: ​ 0x88  status#1
 +  ​
 +**''​nlen''​** - длина строки nonce в байтах.
 +  ​
 +''​**nonce**''​ - расшифрованная приватным ключем значение nonce, полученное от сервера командой AUTH_INIT
 +
 +''​**status**''​ - результат аутентификации:​
 +  0    - ACCEPTED - успешно
 +  0xFF - DENIED - отказано
 +
 +
 +===== FE - UNAUTHENTICATED =====
 +Ответ на любую команду,​ если сервер требует аутентификации,​ и она не выполнена. Не распространяется на команды AUTH_*.
 +
 +  answer: ​ 0xFE  ​
 +  ​
 ===== FF - UNKNOWN ===== ===== FF - UNKNOWN =====
-Ответ на неизвестную ​команду,​ код которой не соответствует вышеописанным ​командам.+Ответ на неизвестную ​серверу команду.
  
   answer: ​ 0xFF  ​   answer: ​ 0xFF  ​
   ​   ​
  
doc/jroboplc/modules/jrbustcp-protocol.1608662043.txt.gz · Последние изменения: 2020/12/22 21:34 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0