Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
doc:jroboplc:modules:jrbustcp-protocol [2021/07/08 10:17] denis [06 - CRC] |
doc:jroboplc:modules:jrbustcp-protocol [2022/01/27 13:35] (текущий) denis [07 - AUTH_INIT] |
||
|---|---|---|---|
| Строка 153: | Строка 153: | ||
| ===== 06 - CRC ===== | ===== 06 - CRC ===== | ||
| - | Чтение CRC32 по всем текущим зафиксированным значениям тегов. | + | Чтение CRC32 по всем текущим значениям тегов, зафиксированным командой UPDATE. |
| request: 0x06 | request: 0x06 | ||
| Строка 171: | Строка 171: | ||
| Для тегов типа STRING используется значение хэш-кода, расчитываемого следующим образом (java): | Для тегов типа STRING используется значение хэш-кода, расчитываемого следующим образом (java): | ||
| <code java> | <code java> | ||
| - | /** | ||
| - | * Returns a hash code for this string. The hash code for a | ||
| - | * {@code String} object is computed as | ||
| - | * <blockquote><pre> | ||
| - | * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] | ||
| - | * </pre></blockquote> | ||
| - | * using {@code int} arithmetic, where {@code s[i]} is the | ||
| - | * <i>i</i>th character of the string, {@code n} is the length of | ||
| - | * the string, and {@code ^} indicates exponentiation. | ||
| - | * (The hash value of the empty string is zero.) | ||
| - | * | ||
| - | * @return a hash code value for this object. | ||
| - | */ | ||
| public int hashCode() { | public int hashCode() { | ||
| int h = hash; | int h = hash; | ||
| Строка 197: | Строка 184: | ||
| } | } | ||
| </code> | </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 | ||
| | | ||