# moon-ipp 项目申报书

## 基本信息

项目名称：moon-ipp：MoonBit 网络打印协议库  
参赛者：马昀昀  
联系方式：1498657823@qq.com  
GitHub 仓库链接：[https://github.com/liyun6666/moon-ipp](https://github.com/liyun6666/moon-ipp)  
项目方向：MoonBit 网络协议基础库 / 应用打印基础设施  
是否为移植项目：否，依据公开协议标准原创实现

## 项目简介

moon-ipp 为 MoonBit 应用提供 IPP 网络打印能力，处理二进制协议、设备能力校验、文档提交和任务管理，减少业务系统对接打印设备的开发成本。项目交付协议库、异步客户端与 CLI；协议核心与可替换传输层分离，可供不同业务系统及支持相应 IPP 功能的设备复用。已检索 Mooncakes 与公开 GitHub 项目，排除自身后未发现功能对应的其他 MoonBit IPP 实现，查重记录保留在仓库中。

1. **业务报表打印**：财务或业务系统提供已有 PDF，查询设备格式及单双面能力，校验参数后提交文档，取得任务编号并跟踪终态，为业务侧记录打印结果提供依据。
2. **办公室队列管理**：管理员输入打印机地址，读取健康状态和任务列表，定位待处理任务，按编号取消并再次查询状态，确认取消结果。
3. **打印功能集成验收**：开发团队在 CI 启动独立 CUPS 虚拟设备，验证打印、取消、分阶段提交及不支持格式的拒绝行为，比较接收文档字节并保存日志，用于发现兼容性和回归问题。

## 核心功能范围

- 提供 IPP 消息、属性分组、多值、嵌套集合和二进制文档的有界编解码；保留未知标签，校验非法结构、属性类型及资源预算。
- 支持设备能力查询、Validate-Job、Print-Job、Create-Job、Send-Document、任务列表、任务查询及取消，共八个操作。
- 按设备能力校验文档格式、份数、纸张、单双面、颜色、分辨率及页范围；提供 media-col 纸张规格、健康诊断与能力快照比较。
- 提供可注入的 HTTP/HTTPS 传输、超时、响应及任务编号核对和任务轮询；提交结果不确定时不自动重发，避免重复打印。
- 提供 CLI、带类型标签的 JSON、可运行示例及独立 CUPS 验证。当前有效 MoonBit 实现 4,594 行，公开仓库已有不少于 29 次实际提交；跨后端测试与 Windows/Linux 构建通过，已发布 Mooncakes 0.1.2。

## 移植或参考说明

参考标准：[RFC 8010](https://www.rfc-editor.org/rfc/rfc8010)、[RFC 8011](https://www.rfc-editor.org/rfc/rfc8011)。项目按 MoonBit 的类型、包和测试体系独立实现。[OpenPrinting CUPS](https://github.com/OpenPrinting/cups) 仅作为独立测试端，不复制源码；许可证为 Apache-2.0，含上游注明的例外。本项目许可证为 Apache-2.0，依赖及测试素材来源记录于 `THIRD_PARTY.md`。首版不实现文档渲染、打印机驱动或完整 IPP Everywhere 认证。
