Управление интерфейсом нижнего уровня
Средства интерфейса нижнего уровня предоставляют возможность управлять некоторыми параметрами самого интерфейса.
Назначение
Получить/Установить/Изменить параметры интерфейса.
Параметры вызова
inter_control(NULL, IC_code, OpBuf, LenOpBuf);
Входные данные
Входными данными являются:
-
код операции управления интерфейсом
IC_code(значение типа integer); -
буфер входных/выходных данных
OpBuf; -
длина буфера входных/выходных данных
LenOpBuf.
Параметр
IC_code должен содержать код операции управления интерфейсом (значение типа integer,
таблица 17).
Определения кодов операций содержатся в файле 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-сервера |
Значения входных данных, в зависимости от типа операции, приведены в таблице 18.
| 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 | Ошибка выполнения |