13 функций · сигнатуры сверены с lib/xtp2.h · проверено libFuzzer
Справочник расширения xtp2
Библиотека кадров бинарного протокола прикладного уровня поверх упорядоченного потока байтов: включается вариантом build.bat xtp; заголовок 32 байта, четыре типа сообщений (REQUEST / RESPONSE / PUSH / EVENT), потоковый инкрементальный разбор и полноценная система limits. Два inline-помощника (xtp2_text / xtp2_wants_reply) остаются в заголовке — скриптовая сторона встраивает их сама.
Формат wire вкратце
раскладка кадра xtp2 (big-endian)
┌──────────────────────────────────────────────┐
│ magic "xtp\2" 4B фиксированный тег + версия │
│ total u32 длина всего кадра │
│ id u64 ID сообщения (связка запрос-ответ) │
│ flags / type / command / params по u16 │
│ body u32 длина тела │
├──────────────────────────────────────────────┤
│ [key:u16 value:u16] × params таблица длин │
│ данные command · данные параметров · body │
└──────────────────────────────────────────────┘
type: REQUEST / RESPONSE / PUSH / EVENT · запрос с id==0 ответа не требует
Умолчания limits: целый кадр ≤1 МиБ, ≤256 параметров, у длин command/ключа/значения свои потолки — всё ужесточается в xtp2_config (ниже). Ошибки разбора липкие: после ошибки новые сообщения не выдаются до xtp2_reset.
Создание и конфигурация (3)
xtp2_config_init конфигурация
Инициализировать конфигурацию значениями по умолчанию (все limits по умолчанию + стандартный аллокатор).
void xtp2_config_init(xtp2_config *config);
Ограничение: max_packet ∈ [32, UINT32_MAX], остальные limits должны согласовываться с wire
Недопустимая конфигурация (например, слишком малый max_packet) вернёт E_ARGUMENT на create — ужесточение ограничений не откажет молча.
xtp2_create / xtp2_destroy жизненный цикл
Создать / уничтожить обработчик. NULL config — значения по умолчанию.
Потоки: один обработчик без конкурентности; несколько обработчиков независимыАллокатор: config позволяет внедрить свой realloc (обязан быть потокобезопасным)
Потоковый разбор (2)
xtp2_feed разбор
Инкрементальная подача байтов: за один вызов выдаётся максимум одно сообщение; consumed сообщает, сколько потреблено.