Skip to content

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

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

启动与关闭 ​

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

Torrent ​

我想知道搜索符号文件
添加 torrenttr_torrentNewtorrent.cc
参数优先级tr_ctor、TR_FORCE、TR_FALLBACKtorrent-ctor.h
启动/排队tr_torrent::start、torrentShouldQueuetorrent.cc
停止/删除stop_now、tr_torrentRemoveInSessionThreadtorrent.cc
Magnet 补 metadataset_metadata_piece、on_metainfo_completedtorrent-magnet.cc
完成状态tr_completion::status、recheck_completenesscompletion.cc、torrent.cc
Resume 合并tr_resume::loadresume.cc

Peer 发现与连接 ​

我想知道搜索符号文件
Tracker tier 调度tr_tier、tier_announce_event_pushannouncer.cc
UDP Tracker 事务tr_announcer_udp_implannouncer-udp.cc
DHT bootstrap/announcetr_dht_impltr-dht.cc
LPD 组播tr_lpd_impl、announceUpkeeptr-lpd.cc
地址进入候选池tr_peerMgrAddPexpeer-mgr.cc
选择新连接make_new_peer_connections、initiate_connectionpeer-mgr.cc
68 字节握手HandshakeSize、read_handshakehandshake.h、handshake.cc
TCP/µTP 抽象tr_peer_socket、new_outgoingpeer-socket*、peer-io.*

消息、选块与数据 ​

我想知道搜索符号文件
解析 Peer Wirecan_read_impl、process_peer_messagepeer-msgs.cc
请求窗口update_desired_request_count、maybe_send_block_requestspeer-msgs.cc
PEX / metadataparse_ut_pex、maybe_send_metadata_requestspeer-msgs.cc
选下一块Wishlist::next、Candidate::operator<=>peer-mgr-wishlist.*
收到 blockon_block_receivedtorrent.cc
跨文件写入tr_ioWriteinout.cc
Piece SHA-1tr_ioTestPiece、recalculate_hashinout.cc
完整验证tr_verify_worker::verify_torrentverify.cc
文件句柄 LRUtr_open_files::getopen-files.cc

限速与调度 ​

我想知道搜索符号文件
带宽树tr_bandwidth::set_parentbandwidth.cc
周期额度allocate、clampbandwidth.cc
上传 rechokerechokeUploads、rechoke_pulsepeer-mgr.cc
Peer 重连reconnect_pulsepeer-mgr.cc
Torrent queueon_queue_timer、count_queue_free_slotssession.cc、torrent-queue.cc
乌龟模式tr_session_alt_speedssession-alt-speeds.cc

RPC 与前端 ​

我想知道搜索符号文件
HTTP 安全链handle_requestrpc-server.cc
409 tokentest_session_idrpc-server.cc、web/src/remote.js
RPC dispatchsync_handlers、async_handlersrpcimpl.cc
JSON/Bencode 共用值tr_variant、tr_variant_serdevariant*
Qt local/remoteRpcClient::start、sendLocalRequestqt/RpcClient.cc
GTK 回调切线程on_rpc_changed_idlegtk/Application.cc
Web torrent 刷新updateTorrents、refreshTorrentsweb/src/remote.js、transmission.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 上游许可。