Summary
Added support for base64 support for non-UTF8 strings
Internally torrent::Object now supports a hex/base64 flag for string, which XMLRPC/JSON/LUA can use to return hex or encoded binary/base64 data.
*.hex
*.base64
*.base64_as_binary
*.as_binary
*.or_base64
*.or_as_binary
d.base_path.*
d.base_filename.*
d.name.*
f.path_components.*
f.frozen_path.*
Some commands now have variants that return hex or base64 encoded strings, always or only if the string is not UTF-8.
Any as_binary command will be converted to base64/binary by xmlrpc or jsonrpc.
Ready directory watch support
Added directory.watch.ready for more robust torrent watch folder event handling.
This uses IN_MOVED_TO | IN_CLOSE_WRITE and cached file information to trigger events.
Per-category socket limits
Added support for per-category socket limits in SocketManager, and used it to separate SCGI, tracker, internal, files and peer categories.
New callback system
Old callback and signal_bitfield systems have been completely replaced by a much more efficient and safe callback system.
All callbacks are now shared_ptr to atomic integers and invalidation only requires incrementing the integer, with minimal locking and conditional waiting when there is a conflict.
Development Funding
Current development relies on donations, and as such is highly appreciated.
Donations make futher development possible, and as such are highly appreciated:
- Paypal
- Patreon
- SubscribeStar
- Bitcoin: 1MpmXm5AHtdBoDaLZstJw8nupJJaeKu8V8
- Ethereum: 0x9AB1e3C3d8a875e870f161b3e9287Db0E6DAfF78
- Litecoin: LdyaVR67LBnTf6mAT4QJnjSG2Zk67qxmfQ
- Cardano: addr1qytaslmqmk6dspltw06sp0zf83dh09u79j49ceh5y26zdcccgq4ph7nmx6kgmzeldauj43254ey97f3x4xw49d86aguqwfhlte
What's Changed
Features
- Added support base64 support for non-UTF8 strings by @rakshasa
- Add directory.watch.ready for safe torrent watch folders by @tonimelisma
- Add add per-category allocation limits to socket_manager by @trim21
- Added a new clean and efficient callback mechanism by @rakshasa
- Converted callbacks to new interface. by @rakshasa in rakshasa/libtorrent#730
- Use shared_ptr to atomic<uint32_t> as callback_id and added a deadlock prevention mechanism by @rakshasa
- Use epoll event_fd and kevent EVFILT_USER to interrupt polling by @rakshasa
- Added --without-ncurses option for daemon-only builds by @trim21
Bug Fixes
- Throw if piece messages are too short by @anthonyryan1
- Added pkgconfig libcurl to Requires.private for static linking by @trim21
- Added intermediate requesting flag for trackers to prevent premature deletion by @rakshasa
- Fixed missing UdpRouter disconnect handling for failed hostname lookups by @rakshasa
- Fixed various tracker exceptions by @rakshasa
- Fixed potential DHT peer list leak by parsing the buffer before adding it to callback by @rakshasa
- Fix use-after-free in dht_compare_closer by @jmakovicka
- Set explicit 8 MB thread stack size when building with musl libc by @Trogious
- Fix RPC/SCGI security and crash bugs by @sirus20x6
- Close SCGI task on EPIPE to stop event_write() busy-loop by @xirvik
- Updated LUA autoconf script by @rakshasa
- Fixed cacheline size check by @rakshasa