Commit Graph

1190 Commits

Author SHA1 Message Date
Chocobo1
30f2d11203 Use proper type for piece index 2020-03-24 16:14:58 +02:00
Chocobo1
9a69afb34a Avoid unnecessary memory writes
Before this change, qbt spent ~1% in these two functions, now it
only spends about ~0.5% in my naive testing.
2020-03-24 16:14:57 +02:00
an0n666
923395b5c7 Check if file exists in seed mode 2020-03-24 16:14:56 +02:00
Vladimir Golovnev (Glassez)
21c8acd55c Let libtorrent decide whether to resume a torrent 2020-03-24 16:14:54 +02:00
FranciscoPombal
709198d2f1 Fix response to event=stopped
BEP-3 says all tracker responses to valid announce requests should be bencoded dictionaries with at least the "peers" and "interval" keys; the "peers" key can be empty.

Also clarify support for BEP-21.
2020-03-24 16:14:54 +02:00
FranciscoPombal
87542b4f75 Don't use IPv4-mapped IPv6
Always register peers with either IPv4 or IPv6.
Fixes potential connection issues.

Also clarify related BEP-24 support.
2020-03-24 16:14:53 +02:00
FranciscoPombal
566ecefbcf Fix BEP-23 support
The embedded tracker was returning a non-compliant response.
The peer lists should be packed strings instead of lists.

Also clarify level of compliance with BEP-7.
2020-03-24 16:14:53 +02:00
FranciscoPombal
41061f3c39 Fix IPv6 endianness 2020-03-24 16:14:52 +02:00
Vladimir Golovnev (Glassez)
703330c40d Allow to save downloaded metadata as torrent file 2020-03-24 16:14:51 +02:00
FranciscoPombal
5a09f996ed Revert using random port by default
Revert change introduced in https://github.com/qbittorrent/qBittorrent/pull/11637 and also revert the associated follow-up https://github.com/qbittorrent/qBittorrent/pull/12000.

Reason: https://github.com/arvidn/libtorrent/pull/4335
2020-03-24 16:14:47 +02:00
sledgehammer999
84aa63a3c5 Use IP geolocation database by DB-IP instead of MaxMind
Closes #11792
2020-03-24 16:14:44 +02:00
Chocobo1
c2afc50c02 Simplify TrackerEntry::status() logic 2020-03-24 16:14:43 +02:00
FranciscoPombal
575bde1d1d Add stalled filters to GUI and Web API/UI
`/api/v2/torrents/info` can now take the following new values for the`filter` parameter: `stalled`, `stalled_uploading` and `stalled_downloading`.

Requires Web API version bump.

Closes #11787
2020-03-24 16:14:42 +02:00
an0n666
d15fdf2dde Do not list not contacted trackers as error 2020-03-24 16:14:41 +02:00
Chocobo1
66c2e70016 Include resume folder path in exception message
The message in RuntimeError exception will be displayed to the users and
users would be clueless if we don't show the path.
2020-03-24 16:14:39 +02:00
Vladimir Golovnev (Glassez)
89ee24fb3e Don't access download handler after it's finished 2020-03-24 16:14:39 +02:00
Chocobo1
b02eb32806 Expose WebUI ban duration to users 2020-03-24 16:14:38 +02:00
Chocobo1
b19153287b Expose WebUI ban counter to users 2020-03-24 16:14:36 +02:00
Tester798
bbaa3a94c5 Fix portable mode
Try to fix portable mode bug. Closes #11706, #11178, #7765.
2020-03-24 16:14:33 +02:00
Chocobo1
534549142e Unify singleton pattern in Profile class
1. Use unified function names `initInstance()` and `freeInstance()` and
make them public.
2. Add `freeInstance()` to avoid noise from memory leak detectors.
3. Let `instance()`return a pointer directly to avoid unnecessary
indirections when invoking functions.
2020-03-24 16:14:32 +02:00
Vladimir Golovnev (Glassez)
5e73afa04e Handle HTTP redirections manually
Qt doesn't support Magnet protocol so we need to handle all redirections
manually to allow redirections to Magnet URIs.
2020-03-24 16:14:31 +02:00
Chocobo1
2289bf4005 Fix singleton class ownership
We shouldn't allow Qt parent ownership in here.
2020-03-24 16:14:28 +02:00
NotTsunami
0cd4900e92 Remove redundant null checks
Attempting to delete a null pointer is a noop in C++.

Closes #2864.

[1] https://isocpp.org/wiki/faq/freestore-mgmt#delete-handles-null
2020-03-24 16:14:28 +02:00
Chocobo1
0ad8dc39e5 Let ReverseResolution always return/emit a result 2020-03-24 16:14:27 +02:00
Chocobo1
000a726e20 Manually abort lookup on class destruction
Some lookup might take longer so instead of waiting them, we abort them
manually.
2020-03-24 16:14:26 +02:00
Chocobo1
4006818520 Improve ReverseResolution class
* Use QHostAddress type for IP
* Avoid double lookup
* Use larger cache size
2020-03-24 16:14:25 +02:00
thalieht
756bc3da54 Show any multiple connections from the same IP in peer list
The uniqueness of peers is now determined by their
IP, port and connection type (uTP etc.) instead of just their IP
2020-03-24 16:14:24 +02:00
Chocobo1
fbb01a36e6 Use systematic approach to generate hash
The basic idea is to hash each class member and then mix them with xor
operation.
However the `seed` must be handled with care, it should only be
introduced once when mixing the hashes of each class member, otherwise
under some circumstances the `seed` might xor with itself and thus break
the intended effect.
2020-03-24 16:14:24 +02:00
Chocobo1
21922ed3b4 Revise qHash function
Instead of xor and narrowing the integers ourselves, now we let qHash()
from Qt do the job properly.
2020-03-24 16:14:23 +02:00
Chocobo1
43fe5214d2 Use faster hash function
qHash(QString) will need to hash/loop through all the data while the new
code will only need one memcpy() and a few bit manipulations.
2020-03-24 16:14:22 +02:00
Vladimir Golovnev (Glassez)
b160b56306 Redesign torrent startup handling 2020-03-24 16:14:20 +02:00
Chocobo1
db258f7461 Migrate away from deprecated settings
Libtorrent has deprecated `upnp_ignore_nonrouters` in
https://github.com/arvidn/libtorrent/pull/4251
2020-03-24 16:14:16 +02:00
FranciscoPombal
07196571e8 Add piece_extent_affinity to AdvancedSettings
Expose option in WebUI settings and WebAPI.

Requires WebAPI version bump.

Closes #11436.
2020-03-24 16:14:14 +02:00
An0n
c4eb6eccaf Change placement of stop tracker timeout 2020-03-24 16:14:10 +02:00
an0n666
1c091cef76 Expose stop_tracker_timeout in advanced settings 2020-03-24 16:14:09 +02:00
sledgehammer999
0898196a5f Tracker is errored only if all local endpoints fail
Closes #11691
2020-03-24 16:14:06 +02:00
Vladimir Golovnev (Glassez)
6ade38400e Save resume data after recheck
Closes #11774.
2020-03-24 16:14:04 +02:00
Chocobo1
4205e99479 Migrate away from deprecated API in Qt 5.14 2020-03-24 16:14:01 +02:00
FranciscoPombal
c5dc361213 WebUI: Implement "Secure" flag for session cookie
Closes #11724.

Option is enabled by default for users using qBittorrent's built-in HTTPS capabilities. This flag will never be set if qBittorrent is using plain HTTP.

Users using HTTPS reverse proxies, like "qbt <-> (http) <-> proxy <-> (https) <-> user" should override the flag in the proxy in order to set it, if they wish to do so.
2020-03-24 16:13:56 +02:00
FranciscoPombal
0c83b3e3a3 Change some settings defaults for better behaviour out of the box
- CheckingMemUsageSize (16 MiB -> 32 MiB): a 16 MiB increase in memory consumption seems worthwhile for a nice performance boost in most cases.
- DiskCacheSize (64 MiB -> Auto): auto yields the best performance without committing to a huge fixed value.
- UseRandomPort (false -> true): The initial port chosen by qBittorrent may clash with something else the user already has that is aways using that port (low probability, but still). Thus, qBittorrent will always fail listening on that port, causing unexpected problems for the user. Users who know they want a fixed port will go to the settings anyway.
2020-03-24 16:13:56 +02:00
sledgehammer999
7389dc082f Delete unnecessary explicit return 2020-03-24 16:13:54 +02:00
sledgehammer999
1e05e6a842 Option to show console when external program is run
Windows only.
Closes #9592
2020-03-24 16:13:54 +02:00
Prince Gupta
85c1a9dbe0 Allow transfer list text color changes through QSS 2020-03-24 16:13:52 +02:00
an0n666
ad7279953e Disable Torrent Queue by default
It should remain disabled by default. Anyone that needs to Queue torrents for seeding/downloading should go to settings and change it to their preference.
2020-03-24 16:13:48 +02:00
sledgehammer999
3a63fabe9c Don't unnecessarily delete OS files in folders 2019-12-18 00:18:53 +02:00
sledgehammer999
3129712f03 Use the incomplete folder where appropriate
Restored torrents already have the correct path saved in their fastresume. Don't override it.
Magnets and new torrents have to be set explicitly to the incomplete folder if it is enabled.

Closes #11552
2019-12-18 00:18:52 +02:00
sledgehammer999
2bda2a37e3 Rework the listening IP/interface selection code
Closes #11561
2019-12-18 00:18:48 +02:00
Chocobo1
027b605fc0 Enable "Apply rate limit to peers on LAN" option by default
Because some ISP will deploy Carrier Grade NAT (means assigning private
IP address to user) and thus accidentally circumvent the speed limiter.

https://www.a10networks.com/blog/carrier-grade-nat/
2019-12-18 00:18:47 +02:00
Chocobo1
5a518d2f35 Fix incorrect translation displayed after language change
It is expected in WebUI that the language change applies immediately
(without a program restart) and this static caching prevents that.
2019-12-18 00:18:40 +02:00
Chocobo1
caa8e1658a Fix stuck in wrong torrent state
Before this patch, adding the torrent in
https://github.com/qbittorrent/qBittorrent/issues/11511 and the torrrent
state will stay in torrent_status::checking_resume_data forever.
This is not the correct state since the `torrent_status.errc` field is
non-zero and this commit fixes it.
2019-12-18 00:18:33 +02:00