Обработка ошибок
Каждому сообщению-запросу должно соответствовать сообщение-отклик. Сообщения об ошибках могут соответствовать как запросам, так и откликам. Сообщение об ошибке указывает, что приславший его не смог разобрать формат полученного запроса или отклика, или при обработке потерпели неудачу верификационные тесты. Не следует путать отрицательный отклик с сообщением об ошибке. Сообщение об ошибке посылается при невозможности обработать входное сообщение. Сообщение Error не посылается, например, при непрохождении аутентификации. Причиной сигнала ошибки может быть искажение пакета при транспортировке по локальной сети или через Интернет, нелегальные значения полей сообщения или протокольные искажения.
Для выявления сообщений-дубликатов достаточно использовать открытый текст, содержащийся в цифровом конверте сообщения. Реакция получателя на сообщение-дубликат зависит от свойств идемпотентности конкретного типа сообщения, от числа дубликатов, частоты их поступления и от того, кто является их отправителем.
Поврежденным сообщением считается такое, которое не может быть обработано. В норме такие сообщения не должны приходить, так как имеется контроль корректности пакетов на транспортном уровне и при обнаружении любых повреждений сообщение должно быть переслано повторно. Но если такое “невозможное событие” все-таки произойдет, будет послано сообщение Error, содержащие код типа ошибки и идентификатор сообщения, ее вызвавшего. Приложение никогда не посылает сообщение Error в ответ на другое сообщение Error. Сообщения, которые не являются протокольными для SET, просто игнорируются.
Если тэг типа сообщения равен 999 (указывая, что это сообщение об ошибке), приложение SET не должно ни при каких обстоятельствах посылать на него отклик. Когда приложение сталкивается с ошибкой, оно формирует Error-сообщение в следующей последовательности.
Шаг | Действие | |
1 | Сформировать ErrorTBC следующим образом:
| |
2 | Подписать сообщение Error, если имеется сертификат подписи | |
3 | Вызвать формирование цифрового конверта и отправить сообщение |
Имя поля | Описание |
Error | <Signed Error, UnsignedError > |
SignedError | S(EE, ErrorTBS) |
UnsignedError | ErrorTBS Неподписанная версия Error будет использоваться, если объект не имеет сертификата подписи |
ErrorTBS |
{ ErrorCode, ErrorNonce, [ErrorOID], [ErrorThumb], ErrorMsg} |
ErrorCode |
Цифровой код, определяющий условия ошибки (см. табл. 4.6.2.16) |
ErrorNonce |
Разовый код, который гарантирует, что подпись генерируется для трудно предсказуемых данных |
ErrorOID |
Объектный идентификатор неподдерживаемых критических расширений, вызвавших ошибку |
ErrorThumb |
Оттиск сертификата, который вызвал ошибку или хэш сертификата, если произошла ошибка верификации подписи |
ErrorMsg |
<MessageHeader, BadWrapper> |
MessageHeader |
Заголовок сообщения, которое вызвало ошибку |
BadWrapper |
Цифровой конверт сообщения, которое вызвало ошибку (не более 20 килобайт) |