* refactor: use the std::vector variant of tr_loadFile() in rpc-server.cc
* refactor: use the std::vector variant of tr_loadFile() in rename-test.cc
* refactor: remove the unused raw ptr variant of tr_loadFile()
* Revert "refactor: remove tr_sessionGetConfigDir() (#3506)"
This reverts commit c50da43ae0.
* Revert "fix: do not leak in tr_getWebClientDir() (#3502)"
This reverts commit 5a75e37033.
Add a shim between the handshake code and the rest of the codebase to
improve decoupling so that a followup PR can add handshake unit tests.
The handshake code no longer directly relies on tr_torrent, tr_session,
tr_dht, or tr_peerMgr.
* refactor: remove tr_address_compare()
* refactor: remove tr_address_to_string()
* refactor: remove NUM_TR_AF_INET_TYPES
* refactor: replace tr_sessionGetPublicAddress with tr_session::getPublicAddress()
* refactor: tr_peerIo() takes tr_address by value
* refactor: replace tr_sessionIsAddressBlocked with tr_session::isAddressBlocked()
* refactor: tr_peerMgrAddIncoming now takes tr_address by value
* refactor: replace tr_address_is_valid_for_peers() with tr_address.isValidForPeers()
* refactor: tr_netOpenPeerSocket takes tr_address by value
* refactor: remove tr_generateAllowedSet()
* refactor: setup_sockaddr takes a tr_address by value
* refactor: tr_netBindTCP() takes a tr_address by value
* refactor: tr_dhtAddNode() takes a tr_address by value
* refactor: remove tr_address_from_string()
* refactor: rename tr_address.isValidForPeers() to .isValidPeerAddress()
* refactor: replace tr_address_from_sockaddr_storage() with tr_address::fromSockaddrStorage()
* refactor: minor cleanup to tr_address::readable()
* Fix testing against reference crypto implementation
Build would fail on CI if using cyassl/wolfssl or polarssl/mbedtls as a
backend and testing it against reference openssl implementation due to
missing include directories, but only if bundled (non-system) b64 is
used.
* Iniitalize size arguments to `wc_DhGenerateKeyPair`
Despite it not being mentioned in the documentation [1] and v4.6 release
notes [2], the two size parameters became [3] not purely "out", but
"in/out", to avoid potential buffer overflows.
[1] https://www.wolfssl.com/documentation/manuals/wolfssl/group__Diffie-Hellman.html
[2] https://github.com/wolfSSL/wolfssl/releases/tag/v4.6.0-stable
[3] 4364700c01
* Add basic support for v2 hashes in transmission-show
* Add sha256 for more libraries
* Fix issue with sha256 digest length
* Add sha256 for polarssl
Note: Bumping miniumum PolarSSL version to 1.3 because of
sha2->sha256 name change.
* Add sha256 for CommonCrypto/ccrypto
* Add sha256 for cyassl
* refactor: simplify tr_swarmGetStats()
* refactor: make addStrike() a tr_swarm member function
* refactor: make updateEndgame() a tr_swarm member function
* refactor: limit scope of some constexpr values
* refactor: make tr_swarm.is_endgame private
* refactor: make tr_swarm.isAllSeeds() a member function
* refactor: add tr_peerMsgs.percentDone()
This moves the `progress` and `have` fields from the `tr_peer` parent
class down into BitTorrent peer subclass, since webseeds by definition
are seeds and have everything.
* refactor: use preferred naming for class members
snake_case for variables, camelCase for methods
* refactor: use semantic type tr_torrent_type_t in libtransmission
* refactor: use semantic type tr_torrent_type_t in gtk client
* refactor: use semantic type tr_torrent_type_t in qt client
* Modernize cache.cc: Convert tr_cache to a class
* Modernize cache.cc: Replaced ptrArray with vector
* refactor: Cache now takes a tr_torrents reference
* refactor: add Key type to Cache
* refactor: avoid std::back_inserter
* refactor: add Cache::flushOldest()
This change has been in the back of my head since I made pull request #2984.
Dropping the zero does not change any of the behaviour.
And this way the format is more familiar to users of the unixoid
octal permissions. Those permissions would not be specified with
a leading zero.
If they were specified with a leading zero, it would mean that some
special permission bits (setuid, setgid or sticky) should be cleared.
Thus removing the leading zero in our settings format removes two
cases of possible confusion.
Additionally the permissions are always padded to three digits to avoid
strangely looking permission strings.
We were incorrectly duplicating most domains because the "do we need
to convert before feeding to psl" test incorrectly returned true for
many domains.
* refactor: make peer_atom.blocklisted private
* refactor: make tr_atomAddrStr a member function
* refactor: make atomIsSeed a member function
* refactor: make tr_isAtom a member function
* refactor: make peer_atom constructor
* refactor: make getReconnectIntervalSecs a member function
* refactor: make peer_atom.fromFirst const
* refactor: make tr_peerIoGetAddress() a member function
* refactor: make tr_peerIo.addr a private field
* refactor: make tr_peerIoIsIncoming a member function
* refactor: make tr_peerIoHasBandwidthLeft a member function
* refactor: make tr_peerIoGetPieceSpeed_Bps a member function
* refactor: make tr_peerIoSupportsFEXT() a member function
* refactor: mark tr_peerIo::supportsDHT nodiscard
* refactor: update naming style for tr_peerIo fields
* refactor: make tr_peerIo.is_seed a private field
* fix: ESPIPE "illegal seek" error while seeding
The root cause is createSocket returning `{}` instead of `TR_BAD_SOCKET`
when we have too many peers in use. This defaulted to fd 0, which wound
up closing stdin.
Commit also includes some const-correctness changes made while tracking
the problem down.
* Modernize blocklist.cc to C++
* Modernize blocklist.cc: Renamed BlocklistFile struct and moved IPv4 range struct inside it
Modernize bandwidth.cc: Review notes; Promote container of blocklists in session to vec of unique_ptrs
* fix: invalid tr_peerMsgsImpl::prefetchCount value
This count could get corrupted due to imprecise bookkeeping when
processing peers' cancel messages. This PR replaces the field with
a `prefetched` flag in the struct that represents a peer request.
This approach has simpler code, simpler logic, and is harder to break.
* refactor: remove unused field tr_torrent.prefetchMagnetMetadata
* refactor: remove unused field tr_torrent.dhtAnnounce6InProgress
* refactor: remove unused field tr_torrent.dhtAnnounceInProgress
* refactor: fold etaULSpeed and etaDLSpeed into one field
* refactor: re-arrange fields to avoid padding
* Support specifying the umask as a string representing an octal number.
* Save the umask as a string representing an octal number.
* Support specifying the IPC socket permission as a string representing an octal number.
* Save the IPC socket permission as a string representing an octal number.
* Add a `base` parameter to `tr_parseNum()` for specifying the radix.
Most use cases involve either (a) using the default group or (b) sharing
a group with other torrents. In both cases, using a tr_quark is cheaper
than a std::string.
* refactor: re-enable cert-err33-c clang-tidy warning
* refactor: use fmt::chrono in transmission-remote
* refactor: use fmt::chrono in transmission-show
* refactor: use fmt::chrono in GTK details dialog
* refactor: use fmt::chrono in tr_session
* refactor: remove tr_localtime_r
* refactor: remove tr_gmtime_r
* refactor: use fmt in gtk/SystemIconTray
* refactor: use fmt in gtk/MakeDialog
* refactor: remove unused tr_strip_positional_args()
Co-authored-by: Mike Gelfand <mikedld@mikedld.com>
* test: fuzz test tr_torrent_metainfo.parseBenc()
* fix: better error-checking in benc string parsing
* fix: return benc failure if the parse stack is unbalanced
* fix: stack range error when logging json parse errors
* test: fuzz test tr_variantFromBuf()
* refactor: do not use va_arg in peer-msgs.cc
* refactor: do not use va_arg in platform.cc
* build: enable cert-dcl50-cpp clang-tidy warning
* refactor: use some tr_pathbuf where sensible
* refactor: make this variable const
* refactor: replace redundant type with auto
* refactor: use the nullptr literal
* refactor: replace declaration by structured binding declaration
* refactor: implement FileTreeItem::children_ with a std::vector
* fix: std::move should not be called on forwarding reference
* fix: uninitialized scalar variable
* fix: unchecked return value from library
* fix: dereference before null check
* fix: unchecked return value from library
* fix: unchecked return value from library
* fixup! refactor: implement FileTreeItem::children_ with a std::vector
* fix: signed-unsigned comparison in libtransmission tests
* fix: avoid unnecessary copy by using const reference
* fix: function should be declared const
* refactor: use fmt::format to build log timestamps
* fix: use init-statement to reduce variable scope
* fixup! refactor: use fmt::format to build log timestamps
* fix: remove tau_tracker destructor for rule-of-zero
* fix: remove tr_peerIo destructor for rule-of-zero
* Revert "fix: dereference before null check"
This reverts commit cd78967815.
* fix: signed-unsigned comparison in libtransmission tests
* fix: use init-statement to reduce variable scope
* fix: extract nested code block into separate method
* fix: extract nested code block into separate method
* fix: extract nested code block into separate method
* fix: use init-statement to reduce variable scope
* fix: extract nested code block into separate method
* fix: signed-unsigned comparison in libtransmission tests
* fixup! fix: extract nested code block into separate method
* fix: mark possibly-unused as [[maybe_unused]]
* fix: invalid stack memory reference in tr_found_file_t
* fix: signed-unsigned comparison in libtransmission tests
* fixup! feat: add support for adding torrents by raw hash values (#2608)
fix array-bounds-read issue found by asan
* fixup! refactor: tr_completion (#2220)
fix array-bounds-read issue in tests fixtures
* fixup! refactor: tr_torrents (#2722)
fix memory leak in torrent-tests
* fix: rename variable to avoid shadow warning w/UTP
* fix: add default dtor for tr_strbuf
* fix: implicit conversion may lose precision
* fix: use init-statement to reduce variable scope
* fix: implicit conversion may lose precision
* fix: extract the assignment from this expression
* fix: use init-statement to reduce variable scope
* fix: use init-statement to reduce variable scope
* fix: do not mix public and private data members
* fix: add a condition to cv.wait call
* fix: do not throw uncaught exceptions in destructor
* refactor: tr_ctorSaveContents takes a string_view filename
* refactor: remove tr_ctorSaveMagnetContents
* refactor: announce_list::save takes a std::string_view
* refactor: magnet() takes an OutputIt arg
Generate the magnet link URL into an output iterator
* refactor: remove deprecated calls to tr_http_escape
* refactor: tr_torrent.torrentFile takes an OutputIterator
* refactor: tr_torrent.torrentFile returns a tr_pathbuf
* refactor: tr_torrent_metainfo.makeFilename returns a tr_pathbuf
* refactor: use tr_urlbuf in announcer-http