# 架构设计

`moon-sdp` 被刻意限制在 SDP 数据层，不负责传输 SDP，也不建立 SIP、RTP、RTCP、
ICE 或 WebRTC 会话。分层如下：

1. `scanner.mbt` 提供 ASCII、整数、长度与转义等无状态工具。
2. `parser.mbt` 逐行建立 `SessionDescription`，在分配前执行输入、行数、媒体数、
   属性数和格式数上限。
3. `model.mbt` 保存 session／media 两级模型和原始行，`attribute.mbt` 在通用属性
   之上提供 `rtpmap`、`fmtp`、方向和有效继承视图。
4. `writer.mbt` 分为逐字节 preserve 写出和 RFC 顺序 canonical 写出。
5. `registry.mbt` 内置 IANA 名称快照；运行时完全离线。
6. `validator.mbt` 产生分级、带规范引用的诊断；`analysis.mbt` 提供查询、统计、
   工程审计和 RFC 3264 offer/answer 静态检查。
7. `cli.mbt` 是纯函数命令分发层，`cmd/sdp-tool` 只处理参数与进程退出。

解析错误和验证问题分离：无法建立结构时返回 `SdpError`；结构可建立但语义有问题
时返回 `ValidationReport`。这种边界使调用方能够决定严格拒绝、展示警告或继续处理。

所有数组按输入顺序保存。canonical 写出只规范字段名、属性名和 CRLF，不擅自排序
可能具有顺序语义的属性。未知属性被保留，未知单字母字段按照 RFC 8866 拒绝。

