Skip to content

附录 A:模块地图

这张地图按责任而非字母排序。每组先读头文件,再读主实现;平台后端和兼容文件按需进入。

1. 运行时与公共 API

模块核心文件责任上游/下游
公共 APItransmission.hapi-compat.*Session/Torrent/Ctor C API,旧协议转换前端 → 内核
Sessionsession.h/.cc全局所有权、设置、监听、定时任务拥有绝大多数子系统
事件线程session-thread.*timer-ev.*libevent loop、跨线程队列、timerUI/worker → 核心序列
Torrent 容器torrents.*按 id/hash 查询、recently removedSession → Torrent
Torrenttorrent.h/.cc生命周期、完成度、目录、统计、信号Session/Peer/I/O 汇合点
构造器torrent-ctor.*合并添加参数、解析 metainfoRPC/UI → Torrent
队列torrent-queue.*queue position 与持久化Session queue timer

2. 元数据与动态值

模块核心文件责任
动态值树variant.*Null/标量/Vector/Map 共用表示
JSONvariant-json.ccRapidJSON streaming parse/write
Bencodebenc.hvariant-benc.cctorrent/resume/LTEP 编解码
Key 驻留quark.*字符串字段名 ↔ TR_KEY_* id
强类型序列化serializer.*Settings/value 与 variant 转换
Torrent metainfotorrent-metainfo.*文件、piece hash、tracker、webseed
Magnet metainfomagnet-metainfo.*magnet URI parse/build
Metadata 下载torrent-magnet.*ut_metadata 分片与 hash 验证
创建 torrentmakemeta.*扫描文件并生成 .torrent

3. Peer 发现

模块核心文件输入输出
Tracker 调度announcer.*announce-list.*tracker tiers、torrent eventannounce/scrape request
HTTP Trackerannouncer-http.ccHTTP(S) URLnormalized response
UDP Trackerannouncer-udp.ccUDP URL/datagramtransaction response
DHTtr-dht.*info hash、UDP packetcompact Peer 列表
LPDtr-lpd.*LAN multicastlocal Peer
PEXpeer-msgs.ccut_pexadded/dropped Peer
Peer 地址peer-mgr.*tr_pexcompact v4/v6candidate atom

4. 连接与协议

模块核心文件责任
网络值类型net.*address/port/socket address、DNS
Peer socketpeer-socket.*peer-socket-tcp.*peer-socket-utp.*TCP/µTP 统一流接口
Peer I/Opeer-io.*buffer、回调、加密 filter、带宽
MSEpeer-mse.*tr-arc4.hDH 与消息流混淆
Handshakehandshake.*torrent 身份、peer id、扩展位、加密协商
Peer messagespeer-msgs.*Peer Wire、Fast、LTEP、request pipeline
Peer 公共事件peer-common.h协议层到 Swarm 的事件对象
Peer Managerpeer-mgr.*swarm、Peer 池、连接、rechoke、调度
Wishlistpeer-mgr-wishlist.*piece/block 排序与请求分配

5. 数据与完整性

模块核心文件关键不变量
Block 坐标block-info.*byte/piece/block 转换无越界
文件映射file-piece-map.*file 与 piece 多对多边界
Bitfieldbitfield.*have/wanted/request 集合
Completioncompletion.*block/piece/wanted 完成度
I/Oinout.*一次逻辑操作可跨多个文件
文件池open-files.*32 项 LRU、读写模式正确
文件集合torrent-files.*.part、move/remove/rename
Verifyverify.*独立 worker,hash 决定真相
Resumeresume.*状态快照、字段优先级与 mtime
本地数据local-data.*本地路径/存在性相关辅助

6. 资源与网络服务

模块核心文件责任
Bandwidthbandwidth.*层级统计、额度分配、clamp
Web fetchweb.*web-utils.*libcurl multi、HTTP 结果、URL 工具
Webseedwebseed.*从 HTTP seed 获取 piece 数据
Blocklistblocklist.*地址范围编译、查询
Port forwardingport-forwarding*NAT-PMP/UPnP 状态机
UDP coretr-udp.*tr-utp.*DHT/Tracker/µTP UDP 分发
IP cacheip-cache.*公网地址发现与缓存

7. RPC 与产品外壳

目录/模块关键文件模式
RPC HTTPrpc-server.*libevent HTTP + Web assets
RPC 方法rpcimpl.*JSON-RPC/legacy dispatch
daemondaemon/daemon.cc本地 Session + 远程服务
GTKgtk/Application.ccgtk/Session.cc直接 C API
Qtqt/Session.ccqt/RpcClient.cclocal/remote RPC
macOSmacosx/Controller.mmmacosx/Torrent.mmObjective-C++ C API
Webweb/src/remote.jstransmission.jsBrowser JSON-RPC
Remote CLIutils/remote.cclibcurl JSON-RPC
Utilitiesutils/create/edit/show.cctorrent 文件工具

8. 平台适配

能力接口实现
文件file.hfile-posix.cc / file-win32.cc
子进程subprocess.hsubprocess-posix.cc / subprocess-win32.cc
Watchdirwatchdir.hinotify / kqueue / win32 / generic
Cryptocrypto-utils.hccrypto / openssl / mbedtls / wolfssl / fallback
平台目录platform.*OS 默认 config/download 路径
字符串桥string-utils.*通用实现 + macOS .mm

9. 依赖方向红线

阅读或修改时警惕反向依赖:

  • 核心不应依赖 GTK/Qt/Cocoa 类型;
  • Peer parser 不应直接调用 UI;
  • 平台文件实现不应知道 Torrent queue;
  • Web UI 不应猜内部字段,必须以 RPC spec 为准;
  • 子系统优先通过 Mediator 获取少量能力,而不是拿整个 Session 任意访问。

文档采用 CC BY-SA 4.0;源码片段保留 Transmission 上游许可。