Files
utun2/src/dm/dm_media_priv.h
T

30 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Внутренние SQL/control операции dm_media и dm_mailbox_media; снаружи не использовать.
* Все вызовы в uasync с живыми inst/topo_sqlite_db. Workers не обращаются к этим helpers.
* Соединением SQLite владеет ядро; вызовы не закрывают его и не меняют внешнее владение транзакцией.
* Из C++ включать внутри extern "C". */
#ifndef DM_MEDIA_PRIV_H
#define DM_MEDIA_PRIV_H
#include "dm_media.h"
#include "dm_core.h"
#include <sqlite3.h>
/* Верхняя граница канонического тела с ct<=255, CCM tag, descriptor и подписью; без cmd/router-заголовка. */
#define DM_MEDIA_BODY_MAX (DM_MSG_FIXED_HDR + 255 + 2 + DM_DATA_MAX + 16 + DM_MEDIA_DESC_SIZE + DM_MSG_SIG_SIZE)
/* SQLite ядра, только uasync: prepare возвращает statement либо NULL с логом ошибки.
* inst/db/sql обязательны; вызывающий проверяет bind/step для чтения и всегда освобождает statement.
* Для записи владение можно передать dm_media_step; prepare сам транзакцию не начинает. */
sqlite3_stmt* dm_media_prepare(struct UTUN_INSTANCE* inst, const char* sql);
/* Шаг записи, затем finalize (включая ошибку): statement передаётся во владение helper.
* 0 только при SQLITE_DONE и успешном finalize, иначе -1 с логом; NULL даёт -1 после ошибки prepare.
* Не предназначен для SELECT; bind проверяет вызывающий, внутри транзакции rollback делает вызывающий. */
int dm_media_step(struct UTUN_INSTANCE* inst, sqlite3_stmt* st);
/* Выполнить SQL без результата: 0/-1 с логом. Владение транзакцией определяется SQL вызывающего. */
int dm_media_exec(struct UTUN_INSTANCE* inst, const char* sql);
/* Заимствованный координатор mailbox либо NULL при остановленном/отсутствующем inst.
* Не освобождать; действителен до dm_mailbox_destroy в том же uasync-потоке. */
struct dm_mb_media* dm_mailbox_get_media(struct UTUN_INSTANCE* inst);
#endif