30 lines
2.4 KiB
C
30 lines
2.4 KiB
C
/* Внутренние 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
|