* refactor: save length of PadA and PadB sent
* refactor: log outgoing `len(PadA)` and `len(PadB)`
* refactor: set `ia_len_` as the MSE handshake initiator
* fix: abort handshake if torrent isn't running
* fix: check if torrent is running in all cases
* fix: don't penalise peer if handshake failed because of us
* fix: tests
* perf: ensure copy-elision in `HandshakeMediator::torrent()`
* code review: more accurate log wording
* properly consume PadA in MSE handshake, check for invalid Ya+PadA
* refactor: make handshake constants public (needed for test coverage)
* test: split test MSE handshakes by blocking steps
* test: use `ASSERT_TRUE` instead of `assert`
* test: fix windows crash by using `recv` and `send`
Co-authored-by: Yat Ho <46261767+tearfur@users.noreply.github.com>
* refactor: use `TR_IF_WIN32` for `LOCAL_SOCKETPAIR_AF`
Co-authored-by: Yat Ho <46261767+tearfur@users.noreply.github.com>
---------
Co-authored-by: Yat Ho <lagoho7@gmail.com>
Co-authored-by: reardonia <reardonia@github.com>
Co-authored-by: Yat Ho <46261767+tearfur@users.noreply.github.com>
* fix: readability-math-missing-parentheses clang-tidy warnings
* chore: remove unused function tr_ctorGetSession()
* chore: remove unused function tr_ctorGetIncompleteDir()
* chore: make generatePublicKey() a lambda
* fix: readability-container-contains warnings
* fix: misc-use-internal-linkage warnings
* chore: inline generate_public_key() since it was only used once
* refactor: don't loop in `tr_handshake::can_read()`
* fix: return `READ_NOW` after handshake success
* code review: more accurate comment wording
* Revert "refactor: don't loop in `tr_handshake::can_read()`"
This reverts commit 4f33520cba6a38171ed203a071158aa37ddcd325.
* refactor: convert `ReadState` to enum class
* refactor: use new `ReadState` value to break out of loop
* refactor: tidy up variables in `tr_handshake::read_crypto_provide()`
* fix: make sure to send out `crypto_select`
* chore: fix comment
---------
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: update bep links
* chore: use more appropriate data types
* chore: checkpoint
* refactor: split `can_request()` into each of their own different signature
* chore: checkpoint
* refactor: convert tr_peerMsgsImpl functions to methods
* chore: checkpoint
* refactor: store peer info as reference
* refactor: convert all member variables to private
* chore: re-arrange methods
* refactor: optimise tmp vector default size in `send_ut_pex()`
* chore: housekeeping
* chore: housekeeping
* refactor: avoid `dynamic_cast` when sending cancel
* fix: restore `blocks_sent_to_peer` stat
regression e91af26923
* fix: choke first then reject
* refactor: convert `tr_peerMsgsNew()` to static factory function
* refactor: store `tr_torrent` reference instead of pointer
* Revert "refactor: store peer info as reference"
This reverts commit bb419bf2
---------
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: remove the tr_error** idiom
* fix: tr_error::message() is only constexpr in c++20 and up
* chore: silence a couple of g++-12 Wshadow warnings
* perf: use libtransmission::StackBuffer in variant-benc
* perf: use libtransmission::StackBuffer in variant-json
* perf: use libtransmission::StackBuffer in handshake
* perf: use libtransmission::StackBuffer in peer-msgs
* perf: use libtransmission::StackBuffer in peer-io
* 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: reimplement Buffer using small
* refactor: use SmallBuffer in announcer-udp
* refactor: use SmallBuffer in variant-json
* refactor: use SmallBuffer in variant-benc
* refactor: use SmallBuffer in handshake
* refactor: use SmallBuffer in peer-msgs
* refactor: delete move semantics on stack-based buffers
* refactor: make tr_peer_socket.type private
* refactor: reimplement tr_peerIo::address() as a wrapper around tr_peer_socket::address()
* refactor: remove tr_address, tr_port from tr_peerIo
* refactor: replace tr_netClosePeerSocket() with tr_peer_socket::close()