- C 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| libburan.c | ||
| libburan.h | ||
| LICENSE | ||
| README.md | ||
libburan
C-библиотека для управления процессом Buran через его строковый протокол
на stdin/stdout. Обеспечивает запуск и остановку процесса, перезапуск
после сбоя, проверку лицензионных ограничений и потокобезопасный доступ
к сессии.
Возможности
- Жизненный цикл процесса: старт, штатная остановка (
EXIT), принудительное завершение по таймауту, ручной и автоматический перезапуск. - Периодические проверки работоспособности с автоматическим перезапуском при превышении заданного числа неудачных проверок.
- Команды протокола:
INIT,CONFIG,SYNC,INFO,SET,OUTFILE,TABLE,ALG,CHCP,EXT,CTM,TRANSLIT,NOSPACES,HASHCHCK,KFOVERWR,BINARY,LEGACY,OFFSET. - Шифрование и расшифрование в памяти (
ENC/DEC,EK/DK) и файлов (FE/FD,FEK/FDK), в том числе с явно заданным ключом. - Потокобезопасность: отдельная блокировка на сессию и на диспетчер, подсчёт ссылок на объектах сессии.
Требования
Стандарт языка — C99. На POSIX требуется pthread. Внешних зависимостей нет.
| Платформа | Процессы | Синхронизация |
|---|---|---|
| Windows | CreateProcess + анонимные каналы |
CRITICAL_SECTION |
| POSIX (Linux и др.) | fork/execvp + pipe |
pthread_mutex_t |
Сборка
POSIX:
gcc -std=c99 -Wall -Wextra -pthread -c libburan.c -o libburan.o
Windows (MinGW):
gcc -std=c99 -Wall -Wextra -D_WIN32 -c libburan.c -o libburan.o
Быстрый старт
#include "libburan.h"
#include <stdio.h>
int main(void) {
brx_manager *mgr = NULL;
brx_session *session = NULL;
brx_launch_options opts;
char cipher[BRX_LINE_SIZE];
brx_status st;
brx_manager_create(&mgr);
brx_manager_start_monitor(mgr, 1000);
brx_launch_options_init(&opts);
opts.algorithm = BRX_ALG_VERESK;
opts.codepage = BRX_CHCP_UTF8;
st = brx_session_start(mgr, &opts, &session);
if (st != BRX_OK) {
fprintf(stderr, "start failed: %s\n", brx_status_str(st));
return 1;
}
if (brx_session_encrypt_with_key(session, "MYSECRETKEY", "SECRET_MESSAGE", cipher, sizeof(cipher), NULL) >= 0) {
printf("cipher: %s\n", cipher);
}
brx_session_stop(session);
brx_manager_destroy(mgr);
return 0;
}
Архитектура
brx_manager— необязательный диспетчер сессий. Разносит во времени моменты запуска процессов (launch_delay_ms) и ведёт фоновый поток, вызывающий проверку работоспособности для всех сессий.brx_session— одна сессия Buran: канал обмена с процессом, состояние лицензии, конфигурация рантайма, статистика, последняя ошибка.
Сессия может быть создана без диспетчера (mgr == NULL); в этом случае
проверка по таймеру не выполняется, ручной вызов
brx_session_health_check доступен.
Протокол
Обмен построчный: команда и ответ — одна строка, завершённая \n
(допускается предшествующий \r). Ответы классифицируются
(brx_response_kind):
OK— выполнено, без возвращаемого значения;EMPTY— выполнено, содержимого нет;BYE— подтверждение завершения;VALUE— значение, конфигурация или строка инициализации;ERROR— ошибка (ERR...,DEBUG_ERROR...,~ENNN~, отказ по лицензии).
Коды ошибок Buran E001–E031 сопоставляются описанию через
brx_buran_error_text.
Редакции лицензии
| Значение | Константа | Отображаемое имя | Запуск | Таблица | Vega / Vega-128 | KOI8-R / ISO-8859-5 / MacCyrillic | CTM |
|---|---|---|---|---|---|---|---|
| 0 | BRX_LICENSE_EDITION_NONE |
Unregistered | нет | — | — | — | — |
| 1 | BRX_LICENSE_EDITION_RESTRICTED |
Standard Edition | нет | — | — | — | — |
| 2 | BRX_LICENSE_EDITION_STANDARD |
Standard Edition | да | нет | нет | нет | нет |
| 3 | BRX_LICENSE_EDITION_PROFESSIONAL |
Professional Edition | да | да | да | да | да |
Запрошенный режим сверяется с ограничениями редакции перед стартом и при
каждом изменении параметра рантайма; при несоответствии возвращается
BRX_ELICENSE.
Автоперезапуск и проверка работоспособности
Параметры brx_launch_options:
auto_restart— автоматический перезапуск при обрыве канала или отказе протокола;max_restart_attempts— предел числа перезапусков (0 — без ограничения);restart_delay_ms— пауза перед повторным запуском;replay_runtime_config_on_restart— повторное применение сохранённой конфигурации рантайма после перезапуска;strict_license_identity_on_restart— требование совпадения лицензии после перезапуска, иначеBRX_ECONFLICT;healthcheck_enabled,healthcheck_interval_ms,healthcheck_failures_before_restart— параметры периодической проверки.
Обработка ошибок
Функции возвращают brx_status, либо brx_ssize_t для операций,
отдающих объём данных. Описание кода — brx_status_str. Последнее
сообщение по сессии — brx_session_last_error. Полный текст обмена с
процессом доступен через brx_launch_options.logger.
Ограничения
- Команды и аргументы не должны содержать
\rи\n. - Минимальная поддерживаемая сборка Buran —
1130.
Лицензия
MIT
Buran и другие продукты семейства Buran лицензируются отдельно.