附录 B:源码索引 —— 按问题找入口
不知道从哪个文件开始时,先在左列找问题。链接指向上游
main;具体实现请搜索符号名,避免依赖会漂移的行号。
启动与关闭
| 我想知道 | 第一入口 | 继续追 |
|---|---|---|
| daemon 怎么启动 | daemon/daemon.cc tr_daemon::start | tr_sessionInit、tr_sessionLoadTorrents |
| Session 怎么建事件线程 | session-thread.cc tr_session_thread_impl | session.cc constructor |
| 任务如何从磁盘恢复 | session.cc tr_sessionLoadTorrents | torrent.cc::init、resume.cc::load |
| 如何优雅关闭 | tr_sessionClose、tr_session_thread_impl::~... | tr_torrent::stop_now、Announcer shutdown |
Torrent
| 我想知道 | 搜索符号 | 文件 |
|---|---|---|
| 添加 torrent | tr_torrentNew | torrent.cc |
| 参数优先级 | tr_ctor、TR_FORCE、TR_FALLBACK | torrent-ctor.h |
| 启动/排队 | tr_torrent::start、torrentShouldQueue | torrent.cc |
| 停止/删除 | stop_now、tr_torrentRemoveInSessionThread | torrent.cc |
| Magnet 补 metadata | set_metadata_piece、on_metainfo_completed | torrent-magnet.cc |
| 完成状态 | tr_completion::status、recheck_completeness | completion.cc、torrent.cc |
| Resume 合并 | tr_resume::load | resume.cc |
Peer 发现与连接
| 我想知道 | 搜索符号 | 文件 |
|---|---|---|
| Tracker tier 调度 | tr_tier、tier_announce_event_push | announcer.cc |
| UDP Tracker 事务 | tr_announcer_udp_impl | announcer-udp.cc |
| DHT bootstrap/announce | tr_dht_impl | tr-dht.cc |
| LPD 组播 | tr_lpd_impl、announceUpkeep | tr-lpd.cc |
| 地址进入候选池 | tr_peerMgrAddPex | peer-mgr.cc |
| 选择新连接 | make_new_peer_connections、initiate_connection | peer-mgr.cc |
| 68 字节握手 | HandshakeSize、read_handshake | handshake.h、handshake.cc |
| TCP/µTP 抽象 | tr_peer_socket、new_outgoing | peer-socket*、peer-io.* |
消息、选块与数据
| 我想知道 | 搜索符号 | 文件 |
|---|---|---|
| 解析 Peer Wire | can_read_impl、process_peer_message | peer-msgs.cc |
| 请求窗口 | update_desired_request_count、maybe_send_block_requests | peer-msgs.cc |
| PEX / metadata | parse_ut_pex、maybe_send_metadata_requests | peer-msgs.cc |
| 选下一块 | Wishlist::next、Candidate::operator<=> | peer-mgr-wishlist.* |
| 收到 block | on_block_received | torrent.cc |
| 跨文件写入 | tr_ioWrite | inout.cc |
| Piece SHA-1 | tr_ioTestPiece、recalculate_hash | inout.cc |
| 完整验证 | tr_verify_worker::verify_torrent | verify.cc |
| 文件句柄 LRU | tr_open_files::get | open-files.cc |
限速与调度
| 我想知道 | 搜索符号 | 文件 |
|---|---|---|
| 带宽树 | tr_bandwidth::set_parent | bandwidth.cc |
| 周期额度 | allocate、clamp | bandwidth.cc |
| 上传 rechoke | rechokeUploads、rechoke_pulse | peer-mgr.cc |
| Peer 重连 | reconnect_pulse | peer-mgr.cc |
| Torrent queue | on_queue_timer、count_queue_free_slots | session.cc、torrent-queue.cc |
| 乌龟模式 | tr_session_alt_speeds | session-alt-speeds.cc |
RPC 与前端
| 我想知道 | 搜索符号 | 文件 |
|---|---|---|
| HTTP 安全链 | handle_request | rpc-server.cc |
| 409 token | test_session_id | rpc-server.cc、web/src/remote.js |
| RPC dispatch | sync_handlers、async_handlers | rpcimpl.cc |
| JSON/Bencode 共用值 | tr_variant、tr_variant_serde | variant* |
| Qt local/remote | RpcClient::start、sendLocalRequest | qt/RpcClient.cc |
| GTK 回调切线程 | on_rpc_changed_idle | gtk/Application.cc |
| Web torrent 刷新 | updateTorrents、refreshTorrents | web/src/remote.js、transmission.js |
| CLI 409 重试 | HTTP response case 409 | utils/remote.cc |
推荐的五次源码漫游
tr_sessionInit → tr_session constructor → session thread:理解运行时。torrent_add → tr_ctor → tr_torrentNew → init → start:理解任务生命周期。Tracker/DHT response → tr_peerMgrAddPex → handshake → tr_peerMsgsNew:理解建连。maybe_send_block_requests → Wishlist::next → PIECE → tr_ioWrite → on_block_received:理解数据闭环。Web click → Remote.sendRequest → handle_request → sync_handlers → C API → next poll:理解产品边界。