99 Commits

Author SHA1 Message Date
xfy911
b6edd5ef67 docs(plan): 更新维护检查记录 — 2026-06-08 09:00 2026-06-08 09:01:50 +08:00
xfy911
b289a09898 docs(plan): 更新维护检查记录 — 2026-06-08 06:00 2026-06-08 06:02:03 +08:00
xfy911
f3d53af5de docs(plan): 更新维护检查记录 — 2026-06-08 03:00 2026-06-08 03:01:23 +08:00
xfy911
61d8af0a8a docs(plan): 更新维护检查记录 — 2026-06-08 00:00 2026-06-08 00:05:59 +08:00
xfy911
e2bceeaa44 docs(plan): 更新维护检查记录 — 2026-06-07 21:00 2026-06-07 21:02:21 +08:00
xfy911
2a5ce429db docs(plan): 更新维护检查记录 — 2026-06-07 18:00 2026-06-07 18:02:51 +08:00
xfy911
2fa7e538a8 docs(plan): 标记项目暂停,核心任务转向 ephemeral 2026-06-07 12:01:40 +08:00
xfy911
81be40086f docs(plan): 更新规划文件 — 标记 Doxygen 注释完成并更新待办池 2026-06-07 09:06:12 +08:00
xfy911
3762343889 docs(plan): 更新规划文件 — 标记编译警告修复完成 2026-06-07 06:07:22 +08:00
xfy911
cc06fc073f feat(proxy): 实现反向代理支持
- 新增 proxy.h / proxy.c:路径前缀匹配 → HTTP/1.1 后端转发
  - proxy_init/add_rule/match/forward API
  - X-Forwarded-For / X-Forwarded-Proto 透传
  - 目前仅支持 HTTP 后端,HTTPS 后端拒绝并警告
- cocoon.h:新增 COCOON_MAX_PROXY_RULES=8,cocoon_config_t 添加 proxies 数组
- config.c:JSON 解析器新增 proxies 数组解析(prefix + target)
- server.c:
  - connection_t 新增 ctx 指针,用于 handle_request 访问代理配置
  - handle_request 中在静态文件服务前检查代理规则
- Makefile:proxy.c 加入 SRCS 和 test_server 编译规则
- cocoon.json:示例配置添加 proxies 数组
- tests/integration_test.sh:新增 3 项反向代理集成测试
- .cocoon-plan.md:标记反向代理为已完成

编译零警告,142 个单元测试 + 80 项集成测试全部通过。
2026-06-07 03:09:10 +08:00
xfy911
b04904cc78 docs(plan): 更新规划文件 — 标记 HTTP/2 POST 支持完成 2026-06-07 00:06:04 +08:00
xfy911
4105aec916 feat(websocket): 实现 WebSocket 空闲超时处理 + 跨平台 poll/select 抽象
- platform.h / platform.c: 新增 cocoon_socket_poll_readable() 跨平台 socket 可读等待
  - POSIX: poll() + POLLIN
  - Windows: select() + fd_set(readfds)
- websocket.c: ws_handle_connection() 实现 timeout_ms 空闲超时处理
  - 每次循环前调用 poll_readable() 等待数据或超时
  - 超时时发送 1001 Idle timeout 关闭帧,清理连接资源
  - 解决遗留 TODO: /* TODO: 超时处理 */
- tests/websocket_test.py: 新增 test_timeout() 测试
  - 连接后不发帧,验证服务端 2 秒后发送 1001 关闭帧
- tests/integration_test.sh: 新增 WebSocket 空闲超时集成测试
  - 启动 -o 2000 短超时服务器验证超时行为
- Makefile: 补全 test_websocket 编译规则,加入 platform.c
  - 修复 undefined reference 错误
- 全部 142 单元测试 + 77 集成测试通过,编译零警告
2026-06-06 21:16:54 +08:00
xfy911
f868128b75 docs(plan): 更新规划文件 — 标记 CI、Makefile、README 更新完成
- 添加 CI 自动化、Makefile 测试目标完善、README 同步更新到已完成列表
- 记录本轮行动记录
2026-06-06 18:09:57 +08:00
xfy911
e77e83e0c8 docs(plan): 更新规划文件 — 标记插件热重载完成 2026-06-06 15:11:52 +08:00
xfy911
4b647cd540 docs(plan): 更新规划文件 — 标记健康检查端点完成
- 集成测试数量更新为 75 项
- 单元测试数量更新为 142 个
- 添加最近行动记录
2026-06-06 12:09:50 +08:00
xfy911
b5acd7f5d1 docs(plan): 更新规划文件 — 标记插件数组支持完成 2026-06-06 09:08:05 +08:00
xfy911
f2231756a3 docs(plan): 更新规划文件 — 标记 WebSocket 单元测试完成
- 标记 Phase 2 WebSocket 单元测试完成(12 项测试)
- 更新单元测试总数:127 → 139
- 更新集成测试总数:66 → 68
- 标记 Phase 4 插件系统完成(MVP)
- 调整待办池优先级
2026-06-06 06:07:06 +08:00
xfy911
05cc458440 docs(plan): 更新路线图,标记插件系统完成 2026-06-06 03:14:31 +08:00
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
xfy911
e542890e26 docs(plan): 更新路线图,标记 WebSocket 广播完成,新增中间件/插件待办 2026-06-05 18:13:50 +08:00
xfy911
22c933a99d merge main into feature/windows-compat-impl: resolve conflicts for TLS, HTTP/2, WebSocket, access log 2026-06-05 16:17:55 +08:00
xfy911
3ded38f331 docs(plan): 更新路线图,标记 WebSocket 完成,调整待办优先级 2026-06-05 15:19:07 +08:00
xfy911
c5162db508 docs(plan): 更新 coco 子模块升级记录,标记多线程模式问题 2026-06-05 03:14:22 +08:00
xfy
782bce9122 docs(plan): 更新 Windows 兼容性状态
- 将 Windows 兼容性标记为已完成
- 更新当前状态:跨平台抽象层 platform.h + platform.c
- 更新待办池:移除 Windows 任务,聚焦 HTTPS/TLS 和 HTTP/2
- 添加 Windows 兼容性实现详情章节
2026-06-05 00:51:09 +08:00
xfy911
3ba9fcea62 feat(access_log): 实现 Nginx combined 格式访问日志
- 新增 access_log.c / access_log.h:Nginx combined 格式,线程安全
- cocoon.h / config.c / config.h:支持 access_log 配置字段
- main.c:新增 --access-log CLI 选项,'-' 表示 stdout
- server.c:connection_t 扩展 client_addr/addr_len/response_status
- server.c:handle_request 中记录 response_status 并调用 access_log_write
- Makefile:加入 access_log.c,更新单元测试编译规则
- cocoon.json:示例配置添加 access_log
- 集成测试:新增 5 项访问日志测试
- 59 项集成测试全部通过,35 个单元测试全部通过
2026-06-05 00:20:24 +08:00
xfy911
3374130c8c docs(plan): 更新行动记录,http2.c 注释完成
标记 Doxygen 中文注释任务进度(http2.c 已完成)。
更新最近行动记录:添加本轮 http2.c 注释详情。
2026-06-04 21:08:03 +08:00
xfy911
606c7b6b4e feat(http2): 添加 HTTP/2 目录浏览支持
- 新增 http2_serve_directory() 函数,生成 HTML 目录列表页面
- 目录无 index.html 时自动返回目录浏览(与 HTTP/1.1 行为一致)
- 支持 HTML 转义、文件大小格式化、修改时间显示、上级目录链接
- 支持 HEAD 请求(不发送 body)
- 新增 2 项集成测试:HTTPS h2 目录浏览 + h2c 目录浏览
- 54 项集成测试全部通过,35 个单元测试全部通过
2026-06-04 18:13:48 +08:00
xfy911
a93e9f32f5 feat(h2c): 添加明文 HTTP/2 升级支持
- server.c: 检测 PRI 魔术字直接连接 + Upgrade: h2c 协商
- server.c: 101 Switching Protocols 响应,正确会话生命周期管理
- http2.h/c: 新增 http2_session_upgrade() 注册 stream 1
- http2.c: 修复 nghttp2_session_upgrade2 head_request 参数误用
- tests: 新增 4 项 h2c 集成测试(prior knowledge、Upgrade、404)
- plan: 标记 h2c 完成,更新测试计数 52 项
2026-06-04 17:56:44 +08:00
xfy911
8a80ec9d96 docs(plan): 修正测试计数,单元测试 35 个 2026-06-04 16:21:48 +08:00
xfy911
158c2a894e docs(plan): HTTP/2 压缩已完成,更新待办池 2026-06-04 16:17:53 +08:00
xfy911
2436218d3e docs(plan): 整理 Phase 3 完成状态,HTTP/2 完全可用 2026-06-04 15:51:12 +08:00
xfy911
88c6597748 docs(plan): 更新 HTTP/2 完成状态,调整待办优先级 2026-06-04 15:47:16 +08:00
xfy911
832ff3dbf6 docs(plan): 更新 HTTP/2 完成状态,调整待办优先级 2026-06-04 14:44:55 +08:00
xfy911
42879cdafd docs(plan): 记录 HTTP/2 骨架完成状态 2026-06-04 14:40:27 +08:00
xfy911
cffb433c1e docs(plan): 更新 TLS/HTTPS 完成状态,调整待办优先级 2026-06-04 14:36:16 +08:00
xfy911
8f9d420447 docs(plan): 更新发展规划,记录本轮测试扩展
- 单元测试总数:125 个(server 从 5→17)
- 更新待办池优先级和状态
2026-06-04 09:04:54 +08:00
xfy
ca7b33aa10 docs(plan): 添加 Windows 兼容性详细技术方案
- 描述目标:在 Windows 上编译运行 cocoon
- 分析核心发现:coco 库已有 Windows 支持,问题在 cocoon 的 POSIX 依赖
- 提出方案:引入 platform.h + platform.c 平台抽象层
- 列出关键 API 映射:POSIX → Windows 对照表
- 记录零拷贝策略:Windows 暂时回退到 read+send,后续用 TransmitFile 优化
- 指定执行方式:Subagent-Driven 逐个 Task 实现
2026-06-04 08:16:27 +08:00
xfy
0fd5ebc043 docs(plan): 在待办池中添加 Windows 兼容性任务
将 Windows 兼容性标记为 [高] 优先级,插入到待办池首位。
当前 cocoon 仅支持 Linux/macOS,Windows 支持是重要演进方向。
2026-06-04 08:16:11 +08:00
xfy911
ea5436febb feat(compression): 添加 Brotli 压缩支持,优先于 Gzip
- 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 项集成测试全部通过
2026-06-04 06:19:42 +08:00
xfy911
3801f3ac0d feat(config): 添加 JSON 配置文件支持 + gzip_enabled 控制 + README 修正
- config.c/config.h: 极简 JSON 解析器,支持数字/字符串/布尔//注释
- cocoon_config_t 新增 gzip_enabled 字段(默认 true)
- main.c: -c <file> 加载配置,--no-gzip 禁用压缩,命令行覆盖配置
- 修复 -r 参数 strdup 崩溃(避免 free 野指针)
- 修复 signal handler 双重 free 问题
- 单元测试: test_config.c 17 个测试全部通过
- 集成测试: 32 项全部通过
- README 修正过时描述(配置方式、安全设计、-v 说明)
2026-06-04 03:14:32 +08:00
xfy911
c036615d58 chore: 添加 test_server 到 gitignore + 更新待办池
- .gitignore: 补充 tests/unit/test_server,避免误提交编译产物
- .cocoon-plan.md: 新增 signal handler cleanup bug 和中文注释完善到待办池
2026-06-04 00:29:31 +08:00
xfy911
19c97ae6a9 test(config): 补充边界与异常路径测试
- test_load_invalid_field_type: 字段类型非法(port 为字符串),验证不 crash
- test_load_log_level_invalid: 非法 log_level 值保持默认 INFO
- test_load_nested_ignored: 嵌套对象——极简解析器返回 false 但不 crash
- test_load_array_ignored: 数组——同上,不 crash 即可
- test_merge_cmdline_null_root_dir: cmdline root_dir 为 NULL 时不覆盖 base
2026-06-04 00:24:29 +08:00
xfy911
d5b8782a1b feat: 添加 Unity 单元测试框架
- 引入 Unity 测试框架 (ThrowTheSwitch)
- 创建 test_http.c (35 个测试): 请求解析、响应格式化、MIME 类型、内存管理
- 创建 test_static.c (31 个测试): 压缩判断、时间处理、ETag、路径安全、HTML 转义、gzip、socket 层
- 更新 Makefile: make unit-test 一键编译运行
- 66 个测试全部通过,集成测试保持 30 项通过
2026-06-03 23:53:22 +08:00
xfy911
bbc45d0735 feat(post): 添加 POST 请求体解析支持
- http_request_t 新增 body / body_len / content_type 字段
- http.c 解析 Content-Type 头,新增 http_request_free 释放 body
- server.c 新增 conn_read_body 从 socket 读取请求体(8MB 上限)
- server.c 新增 handle_post_request 返回 JSON 回显
  - 支持 application/json 直接回显
  - 支持 application/x-www-form-urlencoded 字符串回显
  - 其他类型返回基本信息
- 8MB 请求体上限(HTTP_MAX_BODY),超限返回 413
- 集成测试新增 3 项 POST 测试:JSON 回显、表单回显、PUT 405
- 30 项测试全部通过
- README 更新:添加 POST 特性、curl 示例、路线图更新
- send_all 从 static 改为全局可见,供 server.c 复用

Phase 2 全部完成:缓存/超时/日志/gzip/测试/压测/POST
2026-06-03 21:24:03 +08:00
xfy911
b6beb8bb9c feat(tests): 添加集成测试套件 + 性能基准 + 更新文档
- 新增 tests/ 目录:
  - integration_test.sh: 27 项 curl/bash 集成测试(GET/HEAD/404/Range/304/gzip/MIME/目录浏览/路径防护)
  - benchmark.sh: wrk 压测脚本,支持单线程和多线程模式
  - fixtures/: 测试用静态资源(HTML/CSS/JS/JSON/PNG)
- Makefile 新增 test / bench 快捷目标
- README 全面更新:
  - 补充 Gzip/缓存/超时/日志等已实现特性
  - 更新命令行参数(-m/-o/-l/-v)
  - 添加性能基准表格(~16K RPS / ~60μs 延迟)
  - 路线图标记已完成项
- .cocoon-plan.md 更新 Phase 2 进度
2026-06-03 21:15:05 +08:00
xfy911
e482e52658 docs(plan): 更新 Phase 2 进度 — gzip 压缩已完成 + 压测数据
- 标记 gzip 压缩为已完成(3086B → 1282B,压缩率 41%)
- 记录单线程压测数据:15K RPS,64us 平均延迟,47MB/s 传输
2026-06-03 18:19:57 +08:00
xfy911
0a71365fac docs(plan): 更新 Phase 2 进度 — 超时/日志已完成,gzip 待集成 2026-06-03 18:19:23 +08:00
xfy911
aebacc26ef docs(plan): 更新进度 — HTTP 缓存已完成 2026-06-03 17:38:59 +08:00
xfy911
a30fcf6ee1 docs(plan): 添加自主发展规划文件 2026-06-03 17:22:54 +08:00