MandaGram MandaGram

C API и перехват методов

6 мин чтения 4 раздела

Структура 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 для отмены отправки.