C API и перехват методов
Заголовочный файл mandagram_plugin.h
Официальный интерфейс C API декларируется в заголовочных файлах mandagram_plugin.h (чистый C) и mandagram_plugin.hpp (обертки C++17/20).
API гарантирует бинарную совместимость между минорными релизами клиента MandaGram.
Структура HookParam
При срабатывании перехваченного метода клиент передает структуру с полным контекстом вызова:
mandagram_plugin.h
typedef struct HookParam { void* env; // JNIEnv указатель void* this_ptr; // Указатель на экземпляр вызываемого объекта void** args; // Массив указателей на аргументы метода uint32_t args_count; // Количество аргументов uint32_t padding; void* result; // Возвращаемое значение метода uint8_t return_early; // Установите 1 для отмены оригинального метода uint8_t has_result; // Установите 1, если подставили собственное значение uint16_t reserved; } HookParam;
Хуки Before и After
- Before Hook: вызывается перед оригинальным кодом метода. Плагин может модифицировать входные аргументы (через
param->args) или досрочно вернуть управление (установивreturn_early = 1и записав собственное значение вparam->result). - After Hook: вызывается после завершения оригинального метода. Позволяет прочитать или подменить вычисленный результат
param->result.
Хуки отправки сообщений TDLib
Высокоуровневый API позволяет регистрировать перехватчики исходящих сообщений:
C API
typedef bool (*MessageSendHookFn)(int64_t chat_id, char** text_inout); api->register_message_send_hook(my_message_filter);
Функция-фильтр может изменить текст сообщения на лету или вернуть false для отмены отправки.