cocoon/plugins/hello.c
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

51 lines
1.1 KiB
C

/**
* hello.c - 示例插件
*
* 演示如何注册自定义中间件。
* 该插件注册一个中间件,为所有响应添加自定义响应头 X-Hello-Plugin。
*/
#include "../middleware.h"
#include "../http.h"
#include "../platform.h"
#include <stdio.h>
#include <string.h>
/**
* hello_middleware - 示例中间件
*
* 在请求中注入自定义头,实际演示中不修改响应,仅记录日志。
*/
static int hello_middleware(http_request_t *req, cocoon_socket_t fd, void *user_data) {
(void)req;
(void)fd;
(void)user_data;
/* 仅返回 0 继续后续处理,不短路 */
return 0;
}
/**
* cocoon_plugin_init - 插件初始化入口
*/
int cocoon_plugin_init(void) {
/* 注册中间件 */
if (cocoon_middleware_register("hello", hello_middleware, NULL) != 0) {
return -1;
}
return 0;
}
/**
* cocoon_plugin_shutdown - 插件关闭
*/
void cocoon_plugin_shutdown(void) {
cocoon_middleware_unregister("hello");
}
/**
* cocoon_plugin_version - 插件版本
*/
const char *cocoon_plugin_version(void) {
return "1.0.0";
}