Since operators were intentionally implicit and we don't want to add more
`NOLINT` comments than necessary, rework the approach to deduce the argument
type instead and cast to it.
* Use imported CMake target for CURL
* Use imported CMake target for fmtlib
* Use imported CMake target for WideInteger
* Use imported CMake target for FastFloat
* Use imported CMake target for UtfCpp
* Use imported CMake target for Threads
* Use imported CMake target for Iconv
* Use imported CMake target for crypto backend
* Use imported CMake target for GTK
* Use imported CMake target for Qt
* Use imported CMake target for deflate
* Use imported CMake target for libevent
* Use imported CMake target for natpmp
* Use imported CMake target for miniupnpc
* Use imported CMake target for dht
* Use imported CMake target for psl
* Use imported CMake target for libutp
* Use imported CMake target for libb64
* Use include directories from libtransmission target
* Reformat CMake code
* Bump minimum CMake version to 3.12
* Add target sources separately via `target_source()`
* Make `tr_win32_app_info()` add target sources on its own
* Don't use `include_directories()`
* Don't use `add_definitions()`
* Limit use of `add_compile_options()`
* Move VDKQueue target declaration to a subdirectory
* Add `tr_disable_source_files_compile()` helper
* Add `tr_target_glib_resources()` helper
* Add `tr_gettext_msgfmt()` helper
* Enable AUTOUIC for Qt client
* Enable AUTORCC for Qt client
* Remove AUTO{MOC,RCC,UIC} source group overrides
* Add `tr_target_idl_files()` helper
* Move source group setup to `tr_qt_add_translation()`
* Add `tr_target_xib_files()` helper
* Prefer `target_sources()` to intermediate variables
* Use explicit visibility versions of `target_*()` commands
* Prefer genexes to conditions in `target_*()` commands
* Add `tr_allow_compile_if()` helper
* Leave only top-level `project()`, remove the rest
* Minor fixups
* Fixup Mac QL plugin install
* Fixup IDE target folders and source groups
* Automatically (re)order include directives (GTK client)
Include our headers first to ease IWYU enforcement.
* Fix includes missing from headers (GTK client)
* Fix build on Mac after includes reordering
Previously `bandwidth.allocate()` was called twice in a row, once for
upload bandwidth and once for download bandwidth.
It has some semi-expensive housekeeping though, so avoid doing that work
twice by having a single call to `bandwidth.allocate()` operate on both
up and down bandwidth.
* Move jsonsl to third-party
This treats it as proper 3rd-party code to which our warning and style
settings don't extend.
* Move wildmat to third-party
This treats it as proper 3rd-party code to which our warning and style
settings don't extend.
* Fixup Xcode project to match new project structure
Its two calls to evbuffer_peek() used 3.5% of CPU use (measured with perf
when built with RelWithDebInfo). I added vecs() so that libtransmsision
could send noncontiguous buffers via utp_writev(); but in my testing, all
the buffers being sent are contiguous and so this is unnecessary work.
* refactor: group related functions together in the source
* refactor: make tr_peerIo::decrypt() private
* refactor: make tr_peerIo::is_seed() private
* refactor: remove unused tr_isPeerIo()
* refactor: move tr_tracker_http_announce() helper funcs into their own namespace
* refactor: move tr_globalIPv6() helper funcs into their own namespace
* refactor: move tr_address_is_valid_for_peers() helper funcs into their own namespace
* refactor: make tr_address_compare() a private method
* refactor: rename tr_address::isIPv4() to is_ipv4()
* refactor: use snake_case for tr_address methods
* refactor: make tr_address_is_valid_for_peers() a member function
* 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()
* fix: save log level, encryption mod, preallocation mode as ints
* fix: ensure log level is saved in tr_sessionGetSettings()
* fix: ensure the right verbosity row is selected
* refactor: add tr_rand_obj()
There are a lot of places in the codebase where we need to populate
an integral type or a fixed-size array with random data. To do this,
we instantiate a local on the stack, fill it with tr_rand_buffer(),
and then use it.
This PR creates a helper function to make this a one-liner.
* Add macOS section to Web-Interface docs
- Add minimal steps to enable web interface on macOS
- Clean up README.md with some markdown linting.
* Updating and modernizing web interface, colors, icons
In general:
- increase spacing and decrease font sizes in most inspectors (so far)
- replace icons with emoji. may not be the way to go in the end
* update toolbar icon sizes to adjust for differences
* Switch from icons to buttons, other minor color changes
1. Add 'warn' class to dangerous actions
2. Add 'table-row' helper to overflow menu
3. Use text instead of icons for this new tab style
* Update icons using feathericons.com
* Rename files, replace some SVG and optimize PNG
* Remove more unused variables
* Update index.html to reflect new icons
* More minor svg changes; delete old images
* Updated build output
* Remove icons, add new feather svg icons
Build is now sub-200 KB
* refactor: make tr_session.private_peer_port a private field
chore: make tr_session.public_peer_port a private field
* refactor: make tr_session.web_ a private field
* refactor: make tr_session.lpd_ a private field
* refactor: make tr_session.bind_ipv4_ private
refactor: make tr_session.bind_ipv6_ private
* refactor: make tr_session.bandwidth_groups_ private; add const accessor
* refactor: make tr_session.port_forwarding_ private
* refactor: make tr_session.peerMgr private pt 1: add tr_session::addIncoming()
* refactor: make tr_session.peerMgr private pt 1: add tr_session::addTorrent()
* refactor: make tr_session.peer_mgr_ private
* refactor: make tr_session.setPeerPort() private
* chore: move private tr_session struct declaration to beginning of class
* chore: move all tr_session fields into the same code section
* chore: move private constexpr, const fields before mutable ones
* chore: move trivial fields before nontrivial fields
* chore: reconcile with refactor/session-const-fields-first
* Sync translations with code
* Sync translations with Transifex
* Remove Mac menu title that isn't displayed and shouldn't be translated
* Add context to logging level strings in GTK client
* Use "µTP" consistently in code
* Use ellipsis instead of three docs in Qt client strings
* Close HTML tags in blocklist-related strings
* Remove trailing space from a translatable string in Qt client
* Add missing plural forms for English strings in Qt client
* Fix spelling: metaInfo -> metainfo
* build: semver versioning
Xref: https://github.com/transmission/transmission/issues/1037
* test: add base62 tests for client-id
* build: include PATCH_VERSION in Transmission.rc.in
* build: semver versioning in version.h
* fixup! build: semver versioning in version.h
undo experimental verison changes that were made for testing purposes
* Fixup version in MSI package filename
Co-authored-by: Mike Gelfand <mikedld@mikedld.com>
* refactor: add a Mediator class to decouple tr_session and tr_port_forwarding
* refactor: add tr_port_forwarding::Mediator::privatePeerPort()
* refactor: add tr_port_forwarding::Mediator::onPortForwarded()
* chore: avoid unnecessary include of timer.h in other headers
* refactor: use a uniform timerMaker() API in mediators
* Fix TR_ASSERT equality
* Further workaround to the assertions from tr-dht
* Update libtransmission/tr-dht.cc
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: rename state enum type as tr_port_forwarding_state
* chore: use snake_case for tr_shared struct fields
* refactor: replace tr_shared with tr_port_forwarding
* refactor: make tr_natpmp_state an enum class
* refactor: uniform naming for port-forwarding module
* refactor: move output-only parameters in tr_natpmp::pulse() to return struct
* fix: use a nullptr multicastif if bindaddr is empty
* chore: use PascalCase for enum class values
* chore: clean up port-forwarding #includes
* chore: remove unused tr_port_forwarding::peerPort()
* chore: use typesafe sin_addr assignment instead of memcpy()
* refactor: make tr_dhtPrintableStatus private
* refactor: make tr_dhtStatus() private
* refactor: make tr_dht status enum private
* refactor: add safety mutex wrapper around libdht API calls
* refactor: make tr_dht::Status an enum class
* refactor: rename private functions
* refactor: const correctness
* refactor: use typesafe assignment instead of memcpy
* refactor: tr_session does not directly call tr_dht
* refactor: tr_dhtPort() returns std::optional
* refactor: use tr_address::fromCompact4 in tr-dht.cc
* refactor: do not use goto in file-win32.cc
* refactor: do not use goto in subprocess-posix.cc
* refactor: do not use goto in peer-io.cc
* build: add cppcoreguidelines-avoid-goto to libtransmission/.clang-tidy
* Use std::unique_ptr to manage UDP core object
N.B.: it's no longer valid to call socket adjustments quirks from
tr_sessionSetUTPEnabled() because the corresponding object may be
not created yet. We have to create (or re-create) it explicitly
(like it's done in tr_sessionSetDHTEnabled()) or just set
is_utp_enabled_ flag of the session and assume that socket
adjustments will be done later when the object is constructed.
When transmission-daemon is running with '--foreground' option,
log messages are emitted to standard error, which may be referred
to a tty. Since an attempt to fsync() tty is always an error,
an extra isatty() precaution should be applied.
Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
* Invalid cross-device: copy_file_range changed in Kernel 5.18 (#3654)
* allow fallback to other copy routines based on errno
* tiered kernel copy routines are tried in runtime now when available
Fix the following warning emitted when using -flto with GCC 12.2.1:
libtransmission/announcer.cc:929:8: warning: type ‘struct announce_data’ violates the C++ One Definition Rule [-Wodr]
929 | struct announce_data
| ^
libtransmission/announcer-http.cc:299:8: note: a different type is defined in another translation unit
299 | struct announce_data
| ^
libtransmission/announcer.cc:931:15: note: the first difference of corresponding definitions is field ‘tier_id’
931 | int const tier_id;
| ^
libtransmission/announcer-http.cc:301:22: note: a field with different name is defined in another translation unit
301 | tr_sha1_digest_t info_hash;
|
Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
* refactor: use make buf_append() a template function; use libfmt
* refactor: make charint() use a lookup table
* chore: use std::equal instead of strncmp
* refactor: make tr_peerIoSetEnabled() a member method
* refactor: make tr_peerIoFlushOutgoingProtocolMsgs() a member method
* refactor: make tr_peerIoFlush() a member method
* refactor: make tr_peerWriteBytes() a member method
* refactor: make tr_peerWriteBuf() a member method
* refactor: make tr_peerIoGetWriteBufferSpace() a member method
* chore: remove unused declaration
* refactor: make tr_peerIoUtpInit() a member method
* refactor: make tr_peerIoNew() a member method
* refactor: make tr_peerIoNewOutgoing() a member method
* refactor: make tr_peerIoNewIncoming() a member method
* refactor: make tr_peerIoReadBytes() a member method
* refactor: make tr_peerIoReadUint8() a member method
* refactor: make tr_peerIoReadUint16() a member method
* refactor: make tr_peerIoReadUint32() a member method
* refactor: make tr_peerIoSetIOFuncs() a member method
* refactor: make tr_peerIoReconnect() a member method
* refactor: make tr_peerIoClear() a member method
* refactor: make tr_peerIoDrain() a member method
* refactor: move evbuffer_add_hton_16() impl to cc
* fix(gtk): prevent duplicate shortcut folders
This prevents duplicates if the recent destination is also a system
shortcut folder.
* refactor(gtk): create gtr_get_recent_dirs helper
* feat(gtk): remember 4 recent relocate dirs
When Transmission listens on both IPv4 and IPv6 interfaces IPv4 listen address
is always passed to CURL's CURLOPT_INTERFACE. In general it stays unnoticed but
if user has multiple IPv6 addresses configured on his system random (first?)
IPv6 address is used. It happens because passed value to CURLOPT_INTERFACE
is not correct -- IPv6 expected but IPv4 is passed.
* refactor: use std::array for keys in transmission-remote
* refactor: use std::array for wide_module_path in platform.cc
* refactor: use std::array for value in tr_env_get_int()
* refactor: use std::array for SysStoreNames in web.cc
* chore: remove unused macro TR_N_ELEMENTS