Библиотека для взаимодействия с Buran
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-31 16:15:19 +03:00
libburan.c Initial commit 2026-07-31 15:02:03 +03:00
libburan.h Initial commit 2026-07-31 15:02:03 +03:00
LICENSE Initial commit 2026-07-31 15:02:03 +03:00
README.md README.md update 2026-07-31 16:15:19 +03:00

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 лицензируются отдельно.