新增插件系统: - 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 排除编译产物和上传目录
51 lines
1.1 KiB
C
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";
|
|
}
|