Управление интерфейсом нижнего уровня
Средства интерфейса нижнего уровня предоставляют возможность управлять некоторыми параметрами самого интерфейса.
Назначение
Получить/Установить/Изменить параметры интерфейса.
Параметры вызова
inter_control(NULL, IC_code, OpBuf, LenOpBuf);
Входные данные
Входными данными являются:
-
код операции управления интерфейсом
IC_code
(значение типа integer); -
буфер входных/выходных данных
OpBuf
; -
длина буфера входных/выходных данных
LenOpBuf
.
Параметр
IC_code
должен содержать код операции управления интерфейсом (значение типа integer,
таблица
18).
Определения кодов операций содержатся в файле
inter.h
.
Код операции | Значение | Выполняемая операция |
---|---|---|
ICR_ENABLE_MSG | 0 | Разрешить/запретить выдачу диагностических сообщений на консоль пользовательского приложения |
ICR_GET_CP | 1 | Получить описание кодовой страницы, используемой интерфейсом по умолчанию |
ICR_SET_CP | 2 | Установить для интерфейса кодовую страницу по умолчанию |
ICR_ADD_NODE | 3 | Зарезервировано |
ICR_DEL_NODE | 4 | Зарезервировано |
ICR_USE_OEM_CP | 5 | Только для ОС Windows. При попытке автоматического определения кодовой страницы работать в OEM-кодировке (кодовая страница СР866) |
ICR_USE_UTF8 | 6 | Передавать тексты SQL-запросов в коде UTF8 |
ICR_REREAD_ENV | 7 |
Получить новое значение переменной окружения
LINTER_CP
|
ICR_SET_STACK_SIZE | 8 | Размер стека процедуры асинхронной обработки запроса |
ICR_FORCE_KRB | 9 | Инициировать идентификацию и аутентификацию с помощью Kerberos-сервера |
Значения входных данных, в зависимости от типа операции, приведены в таблице 19.
IC_code | Значение в OpBuf | LenOpBuf |
---|---|---|
ICR_ENABLE_MSG | 0 – разрешение 1 – запрет | 1 |
ICR_GET_CP | Структура данных типа LCODEPAGE |
Размер структуры данных типа
LCODEPAGE
|
ICR_SET_CP | Числовое значение кодировки, которое должно соответствовать полю WIN_CODE системной таблицы $$$CHARSET | CP_AS_NUM (значение 0) |
Строковое значение кодировки, которое должно соответствовать полю NAME системной таблицы $$$CHARSET | CP_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 | Ошибка выполнения |