Skip to content

附录 B:源码索引 —— 按问题找入口

不知道从哪个文件开始时,先在左列找问题。链接指向上游 main;具体实现请搜索符号名,避免依赖会漂移的行号。

启动与关闭

我想知道第一入口继续追
daemon 怎么启动daemon/daemon.cc tr_daemon::starttr_sessionInittr_sessionLoadTorrents
Session 怎么建事件线程session-thread.cc tr_session_thread_implsession.cc constructor
任务如何从磁盘恢复session.cc tr_sessionLoadTorrentstorrent.cc::initresume.cc::load
如何优雅关闭tr_sessionClosetr_session_thread_impl::~...tr_torrent::stop_now、Announcer shutdown

Torrent

我想知道搜索符号文件
添加 torrenttr_torrentNewtorrent.cc
参数优先级tr_ctorTR_FORCETR_FALLBACKtorrent-ctor.h
启动/排队tr_torrent::starttorrentShouldQueuetorrent.cc
停止/删除stop_nowtr_torrentRemoveInSessionThreadtorrent.cc
Magnet 补 metadataset_metadata_pieceon_metainfo_completedtorrent-magnet.cc
完成状态tr_completion::statusrecheck_completenesscompletion.cctorrent.cc
Resume 合并tr_resume::loadresume.cc

Peer 发现与连接

我想知道搜索符号文件
Tracker tier 调度tr_tiertier_announce_event_pushannouncer.cc
UDP Tracker 事务tr_announcer_udp_implannouncer-udp.cc
DHT bootstrap/announcetr_dht_impltr-dht.cc
LPD 组播tr_lpd_implannounceUpkeeptr-lpd.cc
地址进入候选池tr_peerMgrAddPexpeer-mgr.cc
选择新连接make_new_peer_connectionsinitiate_connectionpeer-mgr.cc
68 字节握手HandshakeSizeread_handshakehandshake.hhandshake.cc
TCP/µTP 抽象tr_peer_socketnew_outgoingpeer-socket*peer-io.*

消息、选块与数据

我想知道搜索符号文件
解析 Peer Wirecan_read_implprocess_peer_messagepeer-msgs.cc
请求窗口update_desired_request_countmaybe_send_block_requestspeer-msgs.cc
PEX / metadataparse_ut_pexmaybe_send_metadata_requestspeer-msgs.cc
选下一块Wishlist::nextCandidate::operator<=>peer-mgr-wishlist.*
收到 blockon_block_receivedtorrent.cc
跨文件写入tr_ioWriteinout.cc
Piece SHA-1tr_ioTestPiecerecalculate_hashinout.cc
完整验证tr_verify_worker::verify_torrentverify.cc
文件句柄 LRUtr_open_files::getopen-files.cc

限速与调度

我想知道搜索符号文件
带宽树tr_bandwidth::set_parentbandwidth.cc
周期额度allocateclampbandwidth.cc
上传 rechokerechokeUploadsrechoke_pulsepeer-mgr.cc
Peer 重连reconnect_pulsepeer-mgr.cc
Torrent queueon_queue_timercount_queue_free_slotssession.cctorrent-queue.cc
乌龟模式tr_session_alt_speedssession-alt-speeds.cc

RPC 与前端

我想知道搜索符号文件
HTTP 安全链handle_requestrpc-server.cc
409 tokentest_session_idrpc-server.ccweb/src/remote.js
RPC dispatchsync_handlersasync_handlersrpcimpl.cc
JSON/Bencode 共用值tr_varianttr_variant_serdevariant*
Qt local/remoteRpcClient::startsendLocalRequestqt/RpcClient.cc
GTK 回调切线程on_rpc_changed_idlegtk/Application.cc
Web torrent 刷新updateTorrentsrefreshTorrentsweb/src/remote.jstransmission.js
CLI 409 重试HTTP response case 409utils/remote.cc

推荐的五次源码漫游

  1. tr_sessionInit → tr_session constructor → session thread:理解运行时。
  2. torrent_add → tr_ctor → tr_torrentNew → init → start:理解任务生命周期。
  3. Tracker/DHT response → tr_peerMgrAddPex → handshake → tr_peerMsgsNew:理解建连。
  4. maybe_send_block_requests → Wishlist::next → PIECE → tr_ioWrite → on_block_received:理解数据闭环。
  5. Web click → Remote.sendRequest → handle_request → sync_handlers → C API → next poll:理解产品边界。

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