cocoon/plugin.h
xfy911 952cc663fe feat(plugin): 实现动态插件系统(.so 加载 + 中间件注册)
新增插件系统:
- plugin.h / plugin.c:dlopen/dlsym 动态加载,最多8个插件
- 插件接口:cocoon_plugin_init / cocoon_plugin_shutdown / cocoon_plugin_version
- 插件可通过 cocoon_middleware_register() 注册中间件参与请求处理
- 命令行:--plugin <path>(可多次指定)
- 配置文件:plugins 字段(字符串,单插件路径)
- server.c 在 server_create 时加载,server_destroy 时逆序卸载
- plugins/hello.c:示例插件,演示中间件注册
- 集成测试:新增插件加载 + 日志验证测试(68项全部通过)
- 单元测试:127个全部通过
- 编译:Makefile 添加 plugin.c 和 -ldl
- .gitignore 排除编译产物和上传目录
2026-06-06 03:13:59 +08:00

90 lines
2.3 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.

/**
* plugin.h - 插件系统接口
*
* 提供动态加载 .so/.dll 扩展的能力,插件可以注册中间件、
* 拦截请求或扩展服务器功能。
*
* 插件接口:
* - cocoon_plugin_init() 初始化,返回 0 表示成功
* - cocoon_plugin_shutdown() 关闭,清理资源
* - cocoon_plugin_version() 返回版本字符串
*
* 插件通过调用 cocoon_middleware_register() 注册中间件来参与请求处理。
*
* @author xfy
*/
#ifndef COCOON_PLUGIN_H
#define COCOON_PLUGIN_H
#include "middleware.h"
#include <stdbool.h>
#include <stddef.h>
/* === 插件接口(插件需要实现) === */
/**
* cocoon_plugin_init_func_t - 插件初始化函数签名
*
* 插件入口。在此函数中调用 cocoon_middleware_register() 注册中间件,
* 或执行其他初始化工作。
*
* @return 0 成功,非 0 失败(服务器会拒绝加载该插件)
*/
typedef int (*cocoon_plugin_init_func_t)(void);
/**
* cocoon_plugin_shutdown_func_t - 插件关闭函数签名
*
* 清理插件分配的资源,注销中间件等。
*/
typedef void (*cocoon_plugin_shutdown_func_t)(void);
/**
* cocoon_plugin_version_func_t - 插件版本函数签名
*
* @return 版本字符串,如 "1.0.0"
*/
typedef const char *(*cocoon_plugin_version_func_t)(void);
/* === 插件加载器 API === */
#define MAX_PLUGINS 8
/**
* cocoon_plugin_load - 加载一个插件
*
* 使用 dlopen/dlsym 加载动态库,调用初始化函数。
* 如果插件没有实现 cocoon_plugin_init则仅加载不执行初始化。
*
* @param path 插件文件路径(.so / .dll
* @return 0 成功,-1 失败
*/
int cocoon_plugin_load(const char *path);
/**
* cocoon_plugin_unload_all - 卸载所有已加载的插件
*
* 按加载逆序调用 shutdown 函数,然后 dlclose。
*/
void cocoon_plugin_unload_all(void);
/**
* cocoon_plugin_count - 获取当前已加载的插件数量
*/
size_t cocoon_plugin_count(void);
/**
* cocoon_plugin_get_version - 获取指定索引的插件版本
*
* @param index 插件索引0 ~ count-1
* @return 版本字符串,或 "unknown"
*/
const char *cocoon_plugin_get_version(size_t index);
/**
* cocoon_plugin_get_path - 获取指定索引的插件路径
*/
const char *cocoon_plugin_get_path(size_t index);
#endif /* COCOON_PLUGIN_H */