目录
thy2小时前18次提交

moonair

aria2 协议核的 MoonBit 验证实现:下载任务生命周期状态机(aria2 六态)+ 分段续传纯核(随役立)——Bring Your Own Transport:核只出「任务该处 何态、该记什么账」,传输 / 落盘 / RPC 服务随役以缝包接入。目标是验证 MoonBit 在状态机、异步并发、FFI 与持久化上的综合能力,不以一比一复刻或 替代 aria2 为目标。

血统明示

aria2 思想与公开 RPC 词表致敬(状态词 waiting / active / paused / complete / error / removed)——代码 clean-room 零借鉴:只承接口语义,不承实现 (aria2 为 GPL 系许可,本仓 Apache-2.0)。分层体例承 moonswim(纯核 / 文法 / sim / 缝)。

包结构

包 职责 入口
thy1016/moonair/core 纯核:下载生命周期状态机(表源 download_fsm.toml 生成,36 格显式穷尽)+ 律法动作(touch / record_error)+ 段账纯核 SegmentMan(拆段 / 分配 / 回收 / 置位账本律)+ 摘要 port(M2a:DigestProvider / DigestStream,算法词表 digest_vocab.toml 生成,含择强序列)+ 分片校验律 PieceCheck + 择强 strongest_supported(M2d:多 hash / 多 pieces 取支持中最强,aria2 实录序)+ BT 分片账 PieceLedger(K8b:覆盖装配 / 判片回收 / 可外发律)+ 多源调度池 SourcePool(M2b:priority / 地点偏好单档提升 / scheme 跳过记账 / 降级换源 / 段 → 源指派) Download::new → step(download, event, download_laws());SegmentMan::new → allocate / mark_persisted;PieceCheck::new → verify / hex_lower;strongest_supported;PieceLedger::new → receive_block / record_judged / export_check;SourcePool::new → acquire / succeed / fail / exhausted
thy1016/moonair/core/digest_mooncry 摘要 port 主 adapter(M2a):mooncry 0.95.0,六算法(md5 / sha-1 / sha-224 / sha-256 / sha-384 / sha-512)流式;纯包全后端 MooncryDigest::new() → &DigestProvider
thy1016/moonair/protocol 文法簇:HTTP 范围语义(RFC 9110)+ Content-Disposition(RFC 6266)+ 控制文件 v1 / session v1 行文法 + Metalink v4 抽取机(M1:表源 metalink_fsm.toml 生成 + 律法 22 动作 + 类型墙 MetalinkDoc + 泛型驱动)+ bencode 编解码与 BT 元信息(K7:BEP 3 严格面 + 正典编码 + Metainfo 类型墙 + info_hash 取原始子串禁重编码,SHA-1 经摘要 port)+ BT 线协议(K8a:握手 / 九种消息编解码 / 分帧缓冲帧长帽 / 位图两律,消息词表 peer_message_vocab.toml 生成)+ 会话面(K8b:BEP 3 初态互 choke,请求只发自未被抓,服务门 = 未掐 + interested + 可外发片)+ tracker 词面(K9a:BEP 3 announce query 构造 / 解析 + BEP 23 compact 回包编解码,failure reason 原文上抛)+ 群册(K9b:TrackerSwarm 记账律——announce 刷新 / stopped 摘除 / 自身异排 / counts 随 left 翻转)+ 磁力与 metaurl torrent 词面(M3a:parse_magnet——xt 恰一 urn:btih / hex·base32 双形 / dn 百分号解码 / tr 累计;torrent_metaurl 选拿) parse_range / resolve_range / parse_disposition / encode_control_file / decode_control_file / parse_session / parse_metalink_from / metalink_law / decode_bencode / encode_bencode / parse_metainfo / info_hash / encode_handshake / decode_handshake / encode_peer_message / decode_peer_message / PeerFrameBuffer / encode_bitfield / decode_bitfield / PeerSessionFace::new → apply_inbound / may_request / may_serve / tracker_announce_query / parse_tracker_announce / decode_tracker_reply / encode_tracker_reply / TrackerSwarm::new → announce / counts / parse_magnet / MetalinkFile::torrent_metaurl
thy1016/moonair/sim 对打床:四形假源(不认 Range / 断流 / 重定向 / 慢源)+ 坏片形(M2a 分片校验敌手,预算制 + 开连日志)+ 页/持久双层假存储(kill -9 两点注入)+ 段协议参照驱动(可选分片校验 + 可选多源池,源 URL 形 sim://<号>)+ BT 片管线参照驱动(K8b:做种/吸血 + 坏块回收重下 + 部分种 / choked 敌形,无进展停轮) drive / persisted_covered / FakeSource::new / FakeSource::open_log / FakeStore::new / bt_drive_pipeline
thy1016/moonair/io 落盘缝:StoragePort 参考实现 FileStore(@fs 定位写 / 刷穿 / 定位恰读(终验读回)/ 控制文件 v1 原子持久;OpenOrCreate 续传语义) FileStore::open → &StoragePort
thy1016/moonair/bt BT 会话真缝(K8c,native):bt_download(拨连下载:握手核 info_hash、interested 立即发、文档序逐块请求等覆盖、边写边验判败回收)+ 服务内核一体两形 bt_serve(听连)/ bt_serve_to(拨连;aria2 出站 MSE-first 降级随机,上传 e2e 方向反转拨其监听口)+ tracker 真缝(K9b:TrackerFixture 夹具——@http.Server,对任何请求都回话,回环政策 ip 恒 127.0.0.1 / interval 1;bt_announce client——GET tracker → 词面解码) bt_download / bt_serve / bt_serve_to / TrackerFixture::new → serve / serve_with / bt_announce
thy1016/moonair/engine 传输缝:多源多连接分段下载(源池轮转探长定总长 → 工人并拉 → 边写边哈希分片校验 → 置位单径时序驱动 → 整文件终验;源失败归 aria2 码,全源出局报末次失败码)+ 下载计划(M2d:Metalink 单文件 → 源表 / 择强校验料 / 段长) download(spec~, store, sources~, digests~, pieces~, file_hash~) / DownloadSpec::new / DownloadError::Failed(code~, reason~) / plan_metalink_file / DownloadPlan::single
thy1016/moonair/engine/cmd 下载器可跑面 moonair <url> <out> [connections] [piece_length]
thy1016/moonair/examples/testsrv K4 跑卷夹具:盘上单文件 HTTP 服务(Range 可切) testsrv <file> [port] [mode]
thy1016/moonair/rpc JSON-RPC 形:指令枚举(类型墙;M2d 增 AddMetalink,base64 在本层剥成文档文本)+ 请求解码 / 响应编码(错误应答文案逐字承 aria2 实录、回显 id)+ GID 形律 + TellStatus 数字串律与终局码面(errorCode / errorMessage 只现于终局);金罐 = aria2 实录对拍 decode_request / encode_result / encode_error / encode_rpc_error / encode_tell_status / gid_form_ok
thy1016/moonair/rpc/server RPC 服务缝:HTTP JSON-RPC(POST /jsonrpc)+ 安全三件(令牌 / 绑定 / 越界)+ 任务表五词分派(addMetalink 每 file 一任务、越界整单判、终局码接引擎失败码;组合根装配 mooncry 摘要与 xml_milky 解析) ServiceConfig::new / serve / contain_path
thy1016/moonair/protocol/xml_milky XML 解析 adapter(M0)+ Metalink 装配入口(M1):Milky2018/xml → 中性拉取事件(XmlPull port);文档上限 4 MiB 前检 + Metalink 文档门 + parse_metalink(文本 → 类型化下载描述) MilkyPull::open / metalink_doc_gate / read_all_events / parse_metalink

gen 链(大 gen 宪法):五表——download_fsm.toml(生命周期,满表 吸收)、protocol/metalink_fsm.toml(Metalink 抽取,非满表即拒,N3 解析机律)、core/digest_vocab.toml(摘要算法词表:IANA 名 ↔ 摘要长度 ↔ 择强序)、core/error_code_vocab.toml(aria2 errorCode 词表:原名 ↔ 实录码值)与 protocol/peer_message_vocab.toml(BT 消息词表:ID ↔ 原名 ↔ 定长负载)是唯一事实源 → 主仓 skelgen/airgen(moonair 方言户)发 core/gen.mbt / protocol/metalink_gen.mbt / core/digest_vocab_gen.mbt / core/error_code_vocab_gen.mbt / protocol/peer_message_vocab_gen.mbt(禁手编);印章住 core/types.mbt,律法动作住 core/download_law.mbt / protocol/metalink_law.mbt。 黄金门 = regen 原始形 + fmt ≡ 入库逐字节(主仓仓根 moon test skelgen/airgen, 一表一罐;scratch 目录按表分家——async test 并发互扫)。

核心零依赖:core 无 async、无传输、无存储、无摘要实现(port 住 core, mooncry 住 adapter 子包);时间 = tick 显式入参,钟在核外;全后端 (wasm-gc / wasm / js / native)。

测试门

moon check --deny-warn       # 零错零警
moon test                    # native 195 罐:生命周期律 9 + 段账律 8 + 摘要 port 9 + 多源调度 8 + mooncry 合规 3 + 持久化文法 13 + bencode·元信息(K7)12 + 线协议(K8a)7 + 片管线(K8b)12 + tracker 词面(K9a)10 + 群册(K9b)2 + 磁力(M3a)5 + sim 27 + io 4 + bt 真缝(K8c)2 + tracker 回环(K9b)2 + engine 15 + rpc 12 + rpc/server 8 + XML port(M0)7 + metalink 抽取(M1)25(bt 四罐为 oracle 罐:须 aria2 台先行——K8c 直拨对 18901/18902 + K9b 相认对 18903/18904 经罐内 tracker 夹具 18910,整模门经 oracle 驱动跑 bt,见 spec §3.17/§3.19)
moon test core --target wasm-gc                 # 纯包 39 罐(路径形不含子包;wasm / js 同数)
moon test core/digest_mooncry --target wasm-gc  # 纯包 3 罐(wasm / js 同数)
moon test sim --target wasm-gc                  # 纯包 27 罐(wasm / js 同数)
moon test protocol --target wasm-gc             # 纯包 51 罐(路径形;wasm / js 同数)
moon test protocol/xml_milky --target wasm-gc   # 纯包 32 罐(wasm / js 同数)
moon test rpc --target wasm-gc                  # 纯包 12 罐(wasm / js 同数)
moon fmt && moon info        # 格式与接口面漂移门

演进位

路线见 spec §五:阶段 1 最小下载核(HTTP/HTTPS 分段 + 断点续传)→ 阶段 2 RPC 控制面 → 阶段 3 BT 子集 → 阶段 4 BT 扩展 → 阶段 5 FFI 边界。

许可证

Apache-2.0(Apache License 2.0),全文见 LICENSE。

关于
604.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号