cocoon/config.h
xfy911 f037ddaa99 Phase 5: 配置热重载校验
新增 config_validate() 函数,在热重载前对配置进行完整校验:
- 端口、工作线程、连接数、超时等数值范围检查
- TLS 证书/密钥、Basic Auth 用户名/密码成对校验
- 代理规则、虚拟主机、FastCGI 规则完整性校验
- 插件路径、日志级别、速率限制等边界检查

server_reload_config() 集成校验逻辑:
- 新配置加载后先校验,失败则拒绝重载并保留旧配置
- 错误信息通过日志输出,便于运维排查

新增 22 项单元测试覆盖 config_validate:
- 空配置、默认值、各类边界值、成对字段校验
- 代理规则、虚拟主机、FastCGI 规则校验
- 无错误缓冲区时的容错处理

编译:零警告
单元测试:465 个全部通过(原有 443 + 22 新增)
集成测试:115 项全部通过
2026-06-15 15:26:38 +08:00

67 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.

/**
* config.h - JSON 配置文件解析模块
*
* 轻量级配置加载,支持从 JSON 文件读取服务器配置。
* 保持零依赖,只解析 cocoon 需要的字段。
*
* @author xfy
*/
#ifndef COCOON_CONFIG_H
#define COCOON_CONFIG_H
#include "cocoon.h"
#include <stdbool.h>
/**
* config_load_from_file - 从 JSON 配置文件加载配置
*
* 解析 JSON 文件,填充 cocoon_config_t 结构体。
* 只解析存在的字段,不存在的保持默认值。
*
* @param path JSON 文件路径
* @param config 输出配置结构体
* @return true 成功false 失败(文件不存在或格式错误)
*/
bool config_load_from_file(const char *path, cocoon_config_t *config);
/**
* config_validate - 校验配置是否合法
*
* 在热重载前调用,确保新配置不会导致服务异常。
* 校验失败时返回 false 并写入错误信息到 err_buf。
*
* @param config 待校验的配置
* @param err_buf 错误信息缓冲区(可为 NULL
* @param err_size 缓冲区大小
* @return true 合法false 不合法
*/
bool config_validate(const cocoon_config_t *config, char *err_buf, size_t err_size);
/**
* config_merge - 用命令行配置覆盖文件配置
*
* 优先级:命令行 > 配置文件 > 硬编码默认值
* 命令行参数中显式指定的值(非默认值)会覆盖配置文件。
*
* @param base 从文件加载的基础配置
* @param cmdline 命令行解析出的配置
* @param has_root_dir 命令行是否指定了 -r
* @param has_port 命令行是否指定了 -p
* @param has_workers 命令行是否指定了 -w
* @param has_max_conn 命令行是否指定了 -m
* @param has_timeout 命令行是否指定了 -o
* @param has_log_level 命令行是否指定了 -l
*/
void config_merge(cocoon_config_t *base, const cocoon_config_t *cmdline,
bool has_root_dir, bool has_port, bool has_workers,
bool has_max_conn, bool has_timeout, bool has_log_level,
bool has_gzip_enabled, bool has_brotli_enabled,
bool has_tls_cert, bool has_tls_key, bool has_tls_enabled,
bool has_access_log,
bool has_cors_enabled, bool has_auth_user, bool has_auth_pass,
bool has_rate_limit,
bool has_plugins);
#endif /* COCOON_CONFIG_H */