- static.c: 新增 brotli_compress(),使用 libbrotlienc(质量 11,窗口 22) - static_serve_file(): 优先 Brotli,回退 Gzip,二进制文件跳过 - http.c: 解析 Accept-Encoding: br,http_request_t 新增 accept_brotli - cocoon.h: cocoon_config_t 新增 brotli_enabled(默认 true) - config.c/h: 解析 brotli_enabled JSON 字段,config_merge() 新增 has_brotli_enabled - main.c: --no-brotli 命令行选项 - server.c: 连接结构体新增 brotli_enabled - Makefile: 链接 -lbrotlienc - 单元测试: test_static.c 新增 4 个 Brotli 测试;test_config.c 新增 brotli 配置测试 - 集成测试: 新增 5 项 Brotli 测试(br 压缩、优先策略、图片不压缩) - cocoon.json: 添加 brotli_enabled 字段 - README: 更新特性描述、curl 示例、命令行参数、路线图 - 113 个单元测试全部通过,37 项集成测试全部通过
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
/**
|
||
* 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_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);
|
||
|
||
#endif /* COCOON_CONFIG_H */
|