3. Сеансовый уровень (протокол NPL)
На сеансовом уровне осуществляется шифрование и маршрутизация пакетов.
Пакета NPL, протокола нижнего уровня (NPL) имеет следующий формат:
Поле
|
Длина
|
Тип
|
Описание
|
Может ли данное поле (значение) изменяться
|
|
заголовок пакета
NPL
|
<signature>
|
2
|
int16
|
Сигнатура - предопределенное поле данных в начале пакета, предназначенное для проверки на принимающей стороне того, что по данному адресу в памяти находятся данные соответствующего пакета. Наличие сигнатуры является обязательным.
|
Нет. В поле всегда должно быть установлено значение 7E7E
|
<data_size>
|
2
|
unsigned int 16
|
Определяет размер данных, находящихся в поле. Для незашифрованных и зашифрованных пакетов всегда равно размеру NPH данных. Если данные передаются в зашифрованном виде, размер поля равен длине данных выровненной по границе 8 байт (требования алгоритма Blowfish). При этом дополнительные байты в расшифрованном пакете не используются. Пример: если длина NPH пакета равна 18, то = 18, а длина поля равна 24.
|
Нет. В поле всегда должно быть установлено значение 0 - дополнительных данных в пакете не содержится.
|
|
<flags>
|
2
|
int16
|
NPL_FLAG_CRC - определяет расчет контрольной суммы пакета (CRC) для обеспечения возможности проверки валидности пакета получателем. Принимает значения: 0 - нет, 1 - да.
|
Нет. В поле всегда должно быть установлено значение 1
|
|
<crc>
|
2
|
unsigned int 16
|
Значение контрольной суммы поля, либо 0x0000, если флаг NPL_FLAG_CRC не установлен.
|
||
<type>
|
1
|
Byte
|
Указывает тип передаваемых данных. NPL_TYPE_ERROR - ошибка протокола NPL_NPL_TYPE NPH - пакет данных NPH
|
Да
|
|
<peer_address>
|
4
|
unsigned int32
|
Определяет адрес участника соединения:
NPL_ADDRESS_SERVER - сервер. Другие значения - мобильные устройства
|
Да
|
|
<request_id>
|
2
|
unsigned int16
|
Идентификатор пакета (ID) рекомендуется делать уникальным хотя бы в рамках одной сессии передачи данных. Например, выбрать некоторое значение ID при установке соединения и для каждого последующего пакета увеличивать его ID на единицу. При достижении 0 x FFFFFFFF следующее значение ID будет равно 0 x 00000000 и т.д.
|
Да
|
|
<data>
|
Var
|
Пакеты протокола NPL однонаправленные, подтверждения не требуют.