Управление интерфейсом нижнего уровня

Средства интерфейса нижнего уровня предоставляют возможность управлять некоторыми параметрами самого интерфейса.

Назначение

Получить/Установить/Изменить параметры интерфейса.

Параметры вызова

inter_control(NULL, IC_code, OpBuf, LenOpBuf);

Входные данные

Входными данными являются:

  • код операции управления интерфейсом IC_code (значение типа integer);

  • буфер входных/выходных данных OpBuf;

  • длина буфера входных/выходных данных LenOpBuf.

Параметр IC_code должен содержать код операции управления интерфейсом (значение типа integer, таблица 18). Определения кодов операций содержатся в файле inter.h.

Таблица 17. Коды операций управления интерфейсом
Код операцииЗначениеВыполняемая операция
ICR_ENABLE_MSG0Разрешить/запретить выдачу диагностических сообщений на консоль пользовательского приложения
ICR_GET_CP1Получить описание кодовой страницы, используемой интерфейсом по умолчанию
ICR_SET_CP2Установить для интерфейса кодовую страницу по умолчанию
ICR_ADD_NODE3Зарезервировано
ICR_DEL_NODE4Зарезервировано
ICR_USE_OEM_CP5Только для ОС Windows. При попытке автоматического определения кодовой страницы работать в OEM-кодировке (кодовая страница СР866)
ICR_USE_UTF86Передавать тексты SQL-запросов в коде UTF8
ICR_REREAD_ENV7 Получить новое значение переменной окружения LINTER_CP
ICR_SET_STACK_SIZE8Размер стека процедуры асинхронной обработки запроса
ICR_FORCE_KRB9Инициировать идентификацию и аутентификацию с помощью Kerberos-сервера

Значения входных данных, в зависимости от типа операции, приведены в таблице 19.

Таблица 18. Значения входных данных операций управления интерфейсом
IC_codeЗначение в OpBufLenOpBuf
ICR_ENABLE_MSG0 – разрешение
1 – запрет
1
ICR_GET_CPСтруктура данных типа LCODEPAGE Размер структуры данных типа LCODEPAGE
ICR_SET_CPЧисловое значение кодировки, которое должно соответствовать полю WIN_CODE системной таблицы $$$CHARSETCP_AS_NUM
(значение 0)
Строковое значение кодировки, которое должно соответствовать полю NAME системной таблицы $$$CHARSETCP_AS_STR
(значение 1)
ICR_ADD_NODEЗарезервировано
ICR_DEL_NODEЗарезервировано
ICR_REREAD_ENV Значение переменной окружения LINTER_CP Длина значения LINTER_CP
ICR_SET_STACK_SIZEРазмер стека процедуры асинхронной обработки запроса
ICR_FORCE_KRB Глобальный флаг идентификации и аутентификации по Kerberos-протоколу (см. «Описание») 1

Примечание

Если значение аргумента LenOpBuf равно 0xFFFF (т.е. -1), то независимо от значения аргумента OpBuf произойдет сброс установленного значения кодовой страницы по умолчанию. Следующая команда, использующая кодовую страницу (например, OPEN) произведет установку кодовой страницы по умолчанию в соответствии с параметрами ОС.

Структура LCODEPAGE:

typedef struct
{
   L_WORD cp_type;
   L_WORD cp_len;
   L_WORD pad;
   union
   {
   L_WORD n_cp;
   L_CHAR s_cp[MAX_ID_LEN];
   } cp;
} LCODEPAGE;

Описание полей структуры LCODEPAGE:

Имя поля Значение
cp_type Способ указания кодовой страницы:
CP_AS_NUM (значение 0) – по номеру (866,1251 и т.п.);
CP_AS_STR (значение 1) – по имени ('CP866', 'KOI8-R' т.п.).
Определения CP_AS_NUM, CP_AS_STR находятся в файле inter.h
cp_len Длина имени кодировки (если тип кодировки CP_AS_STR)
pad Выравнивание
n_cp Номер кодировки (в случае CP_AS_NUM)
s_cp Имя кодировки (в случае CP_AS_STR)

Примечание

Список доступных кодовых страниц находится в таблице $$$CHARSET.

Выходные данные

Выходными данными является буфер входных/выходных данных OpBuf (для операции ICR_GET_CP).

Описание

В случае если кодировка по умолчанию для интерфейса не была установлена с помощью операции ICR_SET_CP, то для её определения используется переменная окружения LINTER_CP. Если переменная LINTER_CP не установлена, то интерфейс пытается сделать кодировкой по умолчанию текущую кодировку ОС. Если такой кодировки нет, то фиксируется код завершения NOCSETQUE, и устанавливается специфическая для каждой ОС встроенная в интерфейс кодировка по умолчанию.

Например, для ОС Windows, имеющей две кодировки (ANSI и OEM), автоматически устанавливается кодировка OEM, если этот выбор задан с помощью операции ICR_USE_OEM_CP, в противном случае используется ANSI.

Флаг ICR_FORCE_KRB задает безусловный режим идентификации и аутентификации приложения по Kerberos-протоколу.

Допустимые значения параметра команды ICR_FORCE_KRB:

  • 1 – установить глобальный флаг идентификации и аутентификации по Kerberos-протоколу. Это означает, что аутентификация всех последующих соединений с СУБД ЛИНТЕР в данном клиентском приложении будет выполняться с помощью Kerberos-протокола;

  • -1 – необходимость идентификации и аутентификации по Kerberos-протоколу проверяется по следующему алгоритму:

    • при первом после запуска клиентского приложения выполнении любой команды нижнего интерфейса проверяется наличие переменной окружения LINTER_KRB;

    • если переменная окружения LINTER_KRB определена, то устанавливается глобальный флаг идентификации и аутентификации по Kerberos-протоколу;

    • если переменная окружения LINTER_KRB не определена, то глобальный флаг идентификации и аутентификации по Kerberos-протоколу сбрасывается.

Таким образом, можно управлять режимом идентификации и аутентификации клиентского приложения в целом без изменения исходного кода. Для поддержки клиентским приложением идентификации и аутентификации по Kerberos-протоколу необходимо только перекомпоновать программу с соответствующей версией библиотеки нижнего уровня (объектного файла) intlib.

Коды завершения

Код Описание
0 Нормальное завершение
1 Ошибка выполнения