* feat: allow downloading sequentially from a specific piece
* Apply review changes
Co-authored-by: Yat Ho <lagoho7@gmail.com>
* Use sequential_download_from_piece param in torrent-add, and save it to resume file
* fix: change observable type bool -> tr_piece_index_t
* fix: run code_style.sh
* fix: improved test and missing comment
Co-authored-by: Yat Ho <lagoho7@gmail.com>
* fix: apply similar changes to sequentialDownloadFromPiece test
* docs: change parameter type boolean -> number
---------
Co-authored-by: Yat Ho <lagoho7@gmail.com>
* chore: housekeeping
* perf: short circuit peer has block check
* refactor: track active requests in each respective peer
* refactor: swap `ActiveRequests` with new request tracking method
* refactor: use bitfield to store active requests per peer
* perf: check active request numbers first
* refactor: initialise candidate values in constructor
* refactor: better naming
* refactor: use `find_by_block()` more
* refactor: store wishlist mediator in swarm object
* test: make it compile
* test: update endgame test
* test: new test for choke event
* test: remove redundant lines
* test: new test for request event
* test: new test for reject event
* refactor: cache block have state in wishlist
* test: fix `gotBlockResortsPiece`
* fixup! refactor: track active requests in each respective peer
* fixup! test: fix `gotBlockResortsPiece`
* fix: count webseeds when calculating active requests
* build: update xcode project
* fix: add missing `candidates_dirty_` checks
* chore: remove old `depends-on` comments
* fixup! refactor: use bitfield to store active requests per peer
* refactor: extract block peer event to separate function
* perf: reorder conditions by overhead
* perf: check for completed block instead of completed piece
* chore: remove duplicated "unrequested piece" check
* refactor: merge similar block size sanity check
* refactor: use map to store number of requests in wishlist
* refactor: add asserts
* refactor: flush write buffer as soon as there is new data
* refactor: more accurate function naming
* fix: account for corrupt pieces in wishlist
* fix: account for unaligned blocks in wishlist
* Revert "fix: account for unaligned blocks in wishlist"
This reverts commit c3fce93cbae49c11d62e26caccedf55c1987aa95.
* fixup! refactor: use map to store number of requests in wishlist
* fix: account for unaligned blocks in wishlist v2
* chore: add `[[nodiscard]]`
* fixup! fix: account for unaligned blocks in wishlist v2
* fix: crash when handshake finishes in the middle of function
* Revert "perf: use libsmall in libtransmission, pt 3 (#5653)"
This reverts commit 3b03494580.
* Revert "perf: use small in libtransmission (#5650)"
This reverts commit 559f6f0332.
* refactor: use BufferReader, BufferWriter in peer-socket
* feat: expose GrowthFactor in tr-buffer
* perf: choose better defaults for the peer message buffers
* chore: sync tests
* refactor: use small::map in ActiveRequests::Impl
* refactor: encapsulate request tracking in a class
Introduces a new class to peer-mgr, `ClientRequests`, which tracks what
active requests we've got pending: which blocks, when the requests were
sent, and who they were sent to.
This shouldn't change peer-mgr behavior. Its goal is to carve out some
of peer-mgr's data structures and encapsulte them behind an API that's
simpler to understand.
* refactor: move ActiveRequests to its own file
* perf: avoid duplicate call to tr_cpMissingBlocksInPiece