Vladimir Golovnev
2 years ago
committed by
GitHub
14 changed files with 1430 additions and 1088 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,730 @@
@@ -0,0 +1,730 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent. |
||||
* Copyright (C) 2015-2022 Vladimir Golovnev <glassez@yandex.ru> |
||||
* Copyright (C) 2006 Christophe Dumez <chris@qbittorrent.org> |
||||
* |
||||
* This program is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU General Public License |
||||
* as published by the Free Software Foundation; either version 2 |
||||
* of the License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||
* |
||||
* In addition, as a special exception, the copyright holders give permission to |
||||
* link this program with the OpenSSL project's "OpenSSL" library (or with |
||||
* modified versions of it that use the same license as the "OpenSSL" library), |
||||
* and distribute the linked executables. You must obey the GNU General Public |
||||
* License in all respects for all of the code used other than "OpenSSL". If you |
||||
* modify file(s), you may extend this exception to your version of the file(s), |
||||
* but you are not obligated to do so. If you do not wish to do so, delete this |
||||
* exception statement from your version. |
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <variant> |
||||
#include <vector> |
||||
|
||||
#include <libtorrent/add_torrent_params.hpp> |
||||
#include <libtorrent/fwd.hpp> |
||||
#include <libtorrent/torrent_handle.hpp> |
||||
|
||||
#include <QHash> |
||||
#include <QPointer> |
||||
#include <QSet> |
||||
#include <QtContainerFwd> |
||||
#include <QVector> |
||||
|
||||
#include "base/path.h" |
||||
#include "base/settingvalue.h" |
||||
#include "base/types.h" |
||||
#include "addtorrentparams.h" |
||||
#include "cachestatus.h" |
||||
#include "categoryoptions.h" |
||||
#include "session.h" |
||||
#include "sessionstatus.h" |
||||
#include "torrentinfo.h" |
||||
#include "trackerentry.h" |
||||
|
||||
#ifdef QBT_USES_LIBTORRENT2 |
||||
// TODO: Remove the following forward declaration once v2.0.8 is released
|
||||
namespace libtorrent |
||||
{ |
||||
struct torrent_conflict_alert; |
||||
} |
||||
#endif |
||||
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) |
||||
class QNetworkConfiguration; |
||||
class QNetworkConfigurationManager; |
||||
#endif |
||||
class QString; |
||||
class QThread; |
||||
class QTimer; |
||||
class QUrl; |
||||
|
||||
class BandwidthScheduler; |
||||
class FileSearcher; |
||||
class FilterParserThread; |
||||
class Statistics; |
||||
|
||||
namespace Net |
||||
{ |
||||
struct DownloadResult; |
||||
} |
||||
|
||||
namespace BitTorrent |
||||
{ |
||||
class InfoHash; |
||||
class MagnetUri; |
||||
class ResumeDataStorage; |
||||
class Torrent; |
||||
class TorrentImpl; |
||||
class Tracker; |
||||
struct LoadTorrentParams; |
||||
|
||||
enum class MoveStorageMode; |
||||
|
||||
struct SessionMetricIndices |
||||
{ |
||||
struct |
||||
{ |
||||
int hasIncomingConnections = -1; |
||||
int sentPayloadBytes = -1; |
||||
int recvPayloadBytes = -1; |
||||
int sentBytes = -1; |
||||
int recvBytes = -1; |
||||
int sentIPOverheadBytes = -1; |
||||
int recvIPOverheadBytes = -1; |
||||
int sentTrackerBytes = -1; |
||||
int recvTrackerBytes = -1; |
||||
int recvRedundantBytes = -1; |
||||
int recvFailedBytes = -1; |
||||
} net; |
||||
|
||||
struct |
||||
{ |
||||
int numPeersConnected = -1; |
||||
int numPeersUpDisk = -1; |
||||
int numPeersDownDisk = -1; |
||||
} peer; |
||||
|
||||
struct |
||||
{ |
||||
int dhtBytesIn = -1; |
||||
int dhtBytesOut = -1; |
||||
int dhtNodes = -1; |
||||
} dht; |
||||
|
||||
struct |
||||
{ |
||||
int diskBlocksInUse = -1; |
||||
int numBlocksRead = -1; |
||||
#ifndef QBT_USES_LIBTORRENT2 |
||||
int numBlocksCacheHits = -1; |
||||
#endif |
||||
int writeJobs = -1; |
||||
int readJobs = -1; |
||||
int hashJobs = -1; |
||||
int queuedDiskJobs = -1; |
||||
int diskJobTime = -1; |
||||
} disk; |
||||
}; |
||||
|
||||
class SessionImpl final : public Session |
||||
{ |
||||
Q_OBJECT |
||||
Q_DISABLE_COPY_MOVE(SessionImpl) |
||||
|
||||
public: |
||||
Path savePath() const override; |
||||
void setSavePath(const Path &path) override; |
||||
Path downloadPath() const override; |
||||
void setDownloadPath(const Path &path) override; |
||||
bool isDownloadPathEnabled() const override; |
||||
void setDownloadPathEnabled(bool enabled) override; |
||||
|
||||
QStringList categories() const override; |
||||
CategoryOptions categoryOptions(const QString &categoryName) const override; |
||||
Path categorySavePath(const QString &categoryName) const override; |
||||
Path categoryDownloadPath(const QString &categoryName) const override; |
||||
bool addCategory(const QString &name, const CategoryOptions &options = {}) override; |
||||
bool editCategory(const QString &name, const CategoryOptions &options) override; |
||||
bool removeCategory(const QString &name) override; |
||||
bool isSubcategoriesEnabled() const override; |
||||
void setSubcategoriesEnabled(bool value) override; |
||||
bool useCategoryPathsInManualMode() const override; |
||||
void setUseCategoryPathsInManualMode(bool value) override; |
||||
|
||||
QSet<QString> tags() const override; |
||||
bool hasTag(const QString &tag) const override; |
||||
bool addTag(const QString &tag) override; |
||||
bool removeTag(const QString &tag) override; |
||||
|
||||
bool isAutoTMMDisabledByDefault() const override; |
||||
void setAutoTMMDisabledByDefault(bool value) override; |
||||
bool isDisableAutoTMMWhenCategoryChanged() const override; |
||||
void setDisableAutoTMMWhenCategoryChanged(bool value) override; |
||||
bool isDisableAutoTMMWhenDefaultSavePathChanged() const override; |
||||
void setDisableAutoTMMWhenDefaultSavePathChanged(bool value) override; |
||||
bool isDisableAutoTMMWhenCategorySavePathChanged() const override; |
||||
void setDisableAutoTMMWhenCategorySavePathChanged(bool value) override; |
||||
|
||||
qreal globalMaxRatio() const override; |
||||
void setGlobalMaxRatio(qreal ratio) override; |
||||
int globalMaxSeedingMinutes() const override; |
||||
void setGlobalMaxSeedingMinutes(int minutes) override; |
||||
bool isDHTEnabled() const override; |
||||
void setDHTEnabled(bool enabled) override; |
||||
bool isLSDEnabled() const override; |
||||
void setLSDEnabled(bool enabled) override; |
||||
bool isPeXEnabled() const override; |
||||
void setPeXEnabled(bool enabled) override; |
||||
bool isAddTorrentPaused() const override; |
||||
void setAddTorrentPaused(bool value) override; |
||||
TorrentContentLayout torrentContentLayout() const override; |
||||
void setTorrentContentLayout(TorrentContentLayout value) override; |
||||
bool isTrackerEnabled() const override; |
||||
void setTrackerEnabled(bool enabled) override; |
||||
bool isAppendExtensionEnabled() const override; |
||||
void setAppendExtensionEnabled(bool enabled) override; |
||||
int refreshInterval() const override; |
||||
void setRefreshInterval(int value) override; |
||||
bool isPreallocationEnabled() const override; |
||||
void setPreallocationEnabled(bool enabled) override; |
||||
Path torrentExportDirectory() const override; |
||||
void setTorrentExportDirectory(const Path &path) override; |
||||
Path finishedTorrentExportDirectory() const override; |
||||
void setFinishedTorrentExportDirectory(const Path &path) override; |
||||
|
||||
int globalDownloadSpeedLimit() const override; |
||||
void setGlobalDownloadSpeedLimit(int limit) override; |
||||
int globalUploadSpeedLimit() const override; |
||||
void setGlobalUploadSpeedLimit(int limit) override; |
||||
int altGlobalDownloadSpeedLimit() const override; |
||||
void setAltGlobalDownloadSpeedLimit(int limit) override; |
||||
int altGlobalUploadSpeedLimit() const override; |
||||
void setAltGlobalUploadSpeedLimit(int limit) override; |
||||
int downloadSpeedLimit() const override; |
||||
void setDownloadSpeedLimit(int limit) override; |
||||
int uploadSpeedLimit() const override; |
||||
void setUploadSpeedLimit(int limit) override; |
||||
bool isAltGlobalSpeedLimitEnabled() const override; |
||||
void setAltGlobalSpeedLimitEnabled(bool enabled) override; |
||||
bool isBandwidthSchedulerEnabled() const override; |
||||
void setBandwidthSchedulerEnabled(bool enabled) override; |
||||
|
||||
bool isPerformanceWarningEnabled() const override; |
||||
void setPerformanceWarningEnabled(bool enable) override; |
||||
int saveResumeDataInterval() const override; |
||||
void setSaveResumeDataInterval(int value) override; |
||||
int port() const override; |
||||
void setPort(int port) override; |
||||
QString networkInterface() const override; |
||||
void setNetworkInterface(const QString &iface) override; |
||||
QString networkInterfaceName() const override; |
||||
void setNetworkInterfaceName(const QString &name) override; |
||||
QString networkInterfaceAddress() const override; |
||||
void setNetworkInterfaceAddress(const QString &address) override; |
||||
int encryption() const override; |
||||
void setEncryption(int state) override; |
||||
int maxActiveCheckingTorrents() const override; |
||||
void setMaxActiveCheckingTorrents(int val) override; |
||||
bool isProxyPeerConnectionsEnabled() const override; |
||||
void setProxyPeerConnectionsEnabled(bool enabled) override; |
||||
ChokingAlgorithm chokingAlgorithm() const override; |
||||
void setChokingAlgorithm(ChokingAlgorithm mode) override; |
||||
SeedChokingAlgorithm seedChokingAlgorithm() const override; |
||||
void setSeedChokingAlgorithm(SeedChokingAlgorithm mode) override; |
||||
bool isAddTrackersEnabled() const override; |
||||
void setAddTrackersEnabled(bool enabled) override; |
||||
QString additionalTrackers() const override; |
||||
void setAdditionalTrackers(const QString &trackers) override; |
||||
bool isIPFilteringEnabled() const override; |
||||
void setIPFilteringEnabled(bool enabled) override; |
||||
Path IPFilterFile() const override; |
||||
void setIPFilterFile(const Path &path) override; |
||||
bool announceToAllTrackers() const override; |
||||
void setAnnounceToAllTrackers(bool val) override; |
||||
bool announceToAllTiers() const override; |
||||
void setAnnounceToAllTiers(bool val) override; |
||||
int peerTurnover() const override; |
||||
void setPeerTurnover(int val) override; |
||||
int peerTurnoverCutoff() const override; |
||||
void setPeerTurnoverCutoff(int val) override; |
||||
int peerTurnoverInterval() const override; |
||||
void setPeerTurnoverInterval(int val) override; |
||||
int requestQueueSize() const override; |
||||
void setRequestQueueSize(int val) override; |
||||
int asyncIOThreads() const override; |
||||
void setAsyncIOThreads(int num) override; |
||||
int hashingThreads() const override; |
||||
void setHashingThreads(int num) override; |
||||
int filePoolSize() const override; |
||||
void setFilePoolSize(int size) override; |
||||
int checkingMemUsage() const override; |
||||
void setCheckingMemUsage(int size) override; |
||||
int diskCacheSize() const override; |
||||
void setDiskCacheSize(int size) override; |
||||
int diskCacheTTL() const override; |
||||
void setDiskCacheTTL(int ttl) override; |
||||
qint64 diskQueueSize() const override; |
||||
void setDiskQueueSize(qint64 size) override; |
||||
DiskIOType diskIOType() const override; |
||||
void setDiskIOType(DiskIOType type) override; |
||||
DiskIOReadMode diskIOReadMode() const override; |
||||
void setDiskIOReadMode(DiskIOReadMode mode) override; |
||||
DiskIOWriteMode diskIOWriteMode() const override; |
||||
void setDiskIOWriteMode(DiskIOWriteMode mode) override; |
||||
bool isCoalesceReadWriteEnabled() const override; |
||||
void setCoalesceReadWriteEnabled(bool enabled) override; |
||||
bool usePieceExtentAffinity() const override; |
||||
void setPieceExtentAffinity(bool enabled) override; |
||||
bool isSuggestModeEnabled() const override; |
||||
void setSuggestMode(bool mode) override; |
||||
int sendBufferWatermark() const override; |
||||
void setSendBufferWatermark(int value) override; |
||||
int sendBufferLowWatermark() const override; |
||||
void setSendBufferLowWatermark(int value) override; |
||||
int sendBufferWatermarkFactor() const override; |
||||
void setSendBufferWatermarkFactor(int value) override; |
||||
int connectionSpeed() const override; |
||||
void setConnectionSpeed(int value) override; |
||||
int socketBacklogSize() const override; |
||||
void setSocketBacklogSize(int value) override; |
||||
bool isAnonymousModeEnabled() const override; |
||||
void setAnonymousModeEnabled(bool enabled) override; |
||||
bool isQueueingSystemEnabled() const override; |
||||
void setQueueingSystemEnabled(bool enabled) override; |
||||
bool ignoreSlowTorrentsForQueueing() const override; |
||||
void setIgnoreSlowTorrentsForQueueing(bool ignore) override; |
||||
int downloadRateForSlowTorrents() const override; |
||||
void setDownloadRateForSlowTorrents(int rateInKibiBytes) override; |
||||
int uploadRateForSlowTorrents() const override; |
||||
void setUploadRateForSlowTorrents(int rateInKibiBytes) override; |
||||
int slowTorrentsInactivityTimer() const override; |
||||
void setSlowTorrentsInactivityTimer(int timeInSeconds) override; |
||||
int outgoingPortsMin() const override; |
||||
void setOutgoingPortsMin(int min) override; |
||||
int outgoingPortsMax() const override; |
||||
void setOutgoingPortsMax(int max) override; |
||||
int UPnPLeaseDuration() const override; |
||||
void setUPnPLeaseDuration(int duration) override; |
||||
int peerToS() const override; |
||||
void setPeerToS(int value) override; |
||||
bool ignoreLimitsOnLAN() const override; |
||||
void setIgnoreLimitsOnLAN(bool ignore) override; |
||||
bool includeOverheadInLimits() const override; |
||||
void setIncludeOverheadInLimits(bool include) override; |
||||
QString announceIP() const override; |
||||
void setAnnounceIP(const QString &ip) override; |
||||
int maxConcurrentHTTPAnnounces() const override; |
||||
void setMaxConcurrentHTTPAnnounces(int value) override; |
||||
bool isReannounceWhenAddressChangedEnabled() const override; |
||||
void setReannounceWhenAddressChangedEnabled(bool enabled) override; |
||||
void reannounceToAllTrackers() const override; |
||||
int stopTrackerTimeout() const override; |
||||
void setStopTrackerTimeout(int value) override; |
||||
int maxConnections() const override; |
||||
void setMaxConnections(int max) override; |
||||
int maxConnectionsPerTorrent() const override; |
||||
void setMaxConnectionsPerTorrent(int max) override; |
||||
int maxUploads() const override; |
||||
void setMaxUploads(int max) override; |
||||
int maxUploadsPerTorrent() const override; |
||||
void setMaxUploadsPerTorrent(int max) override; |
||||
int maxActiveDownloads() const override; |
||||
void setMaxActiveDownloads(int max) override; |
||||
int maxActiveUploads() const override; |
||||
void setMaxActiveUploads(int max) override; |
||||
int maxActiveTorrents() const override; |
||||
void setMaxActiveTorrents(int max) override; |
||||
BTProtocol btProtocol() const override; |
||||
void setBTProtocol(BTProtocol protocol) override; |
||||
bool isUTPRateLimited() const override; |
||||
void setUTPRateLimited(bool limited) override; |
||||
MixedModeAlgorithm utpMixedMode() const override; |
||||
void setUtpMixedMode(MixedModeAlgorithm mode) override; |
||||
bool isIDNSupportEnabled() const override; |
||||
void setIDNSupportEnabled(bool enabled) override; |
||||
bool multiConnectionsPerIpEnabled() const override; |
||||
void setMultiConnectionsPerIpEnabled(bool enabled) override; |
||||
bool validateHTTPSTrackerCertificate() const override; |
||||
void setValidateHTTPSTrackerCertificate(bool enabled) override; |
||||
bool isSSRFMitigationEnabled() const override; |
||||
void setSSRFMitigationEnabled(bool enabled) override; |
||||
bool blockPeersOnPrivilegedPorts() const override; |
||||
void setBlockPeersOnPrivilegedPorts(bool enabled) override; |
||||
bool isTrackerFilteringEnabled() const override; |
||||
void setTrackerFilteringEnabled(bool enabled) override; |
||||
bool isExcludedFileNamesEnabled() const override; |
||||
void setExcludedFileNamesEnabled(const bool enabled) override; |
||||
QStringList excludedFileNames() const override; |
||||
void setExcludedFileNames(const QStringList &newList) override; |
||||
bool isFilenameExcluded(const QString &fileName) const override; |
||||
QStringList bannedIPs() const override; |
||||
void setBannedIPs(const QStringList &newList) override; |
||||
ResumeDataStorageType resumeDataStorageType() const override; |
||||
void setResumeDataStorageType(ResumeDataStorageType type) override; |
||||
|
||||
bool isRestored() const override; |
||||
|
||||
Torrent *getTorrent(const TorrentID &id) const override; |
||||
Torrent *findTorrent(const InfoHash &infoHash) const override; |
||||
QVector<Torrent *> torrents() const override; |
||||
qsizetype torrentsCount() const override; |
||||
bool hasActiveTorrents() const override; |
||||
bool hasUnfinishedTorrents() const override; |
||||
bool hasRunningSeed() const override; |
||||
const SessionStatus &status() const override; |
||||
const CacheStatus &cacheStatus() const override; |
||||
qint64 getAlltimeDL() const override; |
||||
qint64 getAlltimeUL() const override; |
||||
bool isListening() const override; |
||||
|
||||
MaxRatioAction maxRatioAction() const override; |
||||
void setMaxRatioAction(MaxRatioAction act) override; |
||||
|
||||
void banIP(const QString &ip) override; |
||||
|
||||
bool isKnownTorrent(const InfoHash &infoHash) const override; |
||||
bool addTorrent(const QString &source, const AddTorrentParams ¶ms = AddTorrentParams()) override; |
||||
bool addTorrent(const MagnetUri &magnetUri, const AddTorrentParams ¶ms = AddTorrentParams()) override; |
||||
bool addTorrent(const TorrentInfo &torrentInfo, const AddTorrentParams ¶ms = AddTorrentParams()) override; |
||||
bool deleteTorrent(const TorrentID &id, DeleteOption deleteOption = DeleteTorrent) override; |
||||
bool downloadMetadata(const MagnetUri &magnetUri) override; |
||||
bool cancelDownloadMetadata(const TorrentID &id) override; |
||||
|
||||
void recursiveTorrentDownload(const TorrentID &id) override; |
||||
void increaseTorrentsQueuePos(const QVector<TorrentID> &ids) override; |
||||
void decreaseTorrentsQueuePos(const QVector<TorrentID> &ids) override; |
||||
void topTorrentsQueuePos(const QVector<TorrentID> &ids) override; |
||||
void bottomTorrentsQueuePos(const QVector<TorrentID> &ids) override; |
||||
|
||||
// Torrent interface
|
||||
void handleTorrentNeedSaveResumeData(const TorrentImpl *torrent); |
||||
void handleTorrentSaveResumeDataRequested(const TorrentImpl *torrent); |
||||
void handleTorrentShareLimitChanged(TorrentImpl *const torrent); |
||||
void handleTorrentNameChanged(TorrentImpl *const torrent); |
||||
void handleTorrentSavePathChanged(TorrentImpl *const torrent); |
||||
void handleTorrentCategoryChanged(TorrentImpl *const torrent, const QString &oldCategory); |
||||
void handleTorrentTagAdded(TorrentImpl *const torrent, const QString &tag); |
||||
void handleTorrentTagRemoved(TorrentImpl *const torrent, const QString &tag); |
||||
void handleTorrentSavingModeChanged(TorrentImpl *const torrent); |
||||
void handleTorrentMetadataReceived(TorrentImpl *const torrent); |
||||
void handleTorrentPaused(TorrentImpl *const torrent); |
||||
void handleTorrentResumed(TorrentImpl *const torrent); |
||||
void handleTorrentChecked(TorrentImpl *const torrent); |
||||
void handleTorrentFinished(TorrentImpl *const torrent); |
||||
void handleTorrentTrackersAdded(TorrentImpl *const torrent, const QVector<TrackerEntry> &newTrackers); |
||||
void handleTorrentTrackersRemoved(TorrentImpl *const torrent, const QStringList &deletedTrackers); |
||||
void handleTorrentTrackersChanged(TorrentImpl *const torrent); |
||||
void handleTorrentUrlSeedsAdded(TorrentImpl *const torrent, const QVector<QUrl> &newUrlSeeds); |
||||
void handleTorrentUrlSeedsRemoved(TorrentImpl *const torrent, const QVector<QUrl> &urlSeeds); |
||||
void handleTorrentResumeDataReady(TorrentImpl *const torrent, const LoadTorrentParams &data); |
||||
void handleTorrentIDChanged(const TorrentImpl *torrent, const TorrentID &prevID); |
||||
|
||||
bool addMoveTorrentStorageJob(TorrentImpl *torrent, const Path &newPath, MoveStorageMode mode); |
||||
|
||||
void findIncompleteFiles(const TorrentInfo &torrentInfo, const Path &savePath |
||||
, const Path &downloadPath, const PathList &filePaths = {}) const; |
||||
|
||||
private slots: |
||||
void configureDeferred(); |
||||
void readAlerts(); |
||||
void enqueueRefresh(); |
||||
void processShareLimits(); |
||||
void generateResumeData(); |
||||
void handleIPFilterParsed(int ruleCount); |
||||
void handleIPFilterError(); |
||||
void handleDownloadFinished(const Net::DownloadResult &result); |
||||
void fileSearchFinished(const TorrentID &id, const Path &savePath, const PathList &fileNames); |
||||
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) |
||||
// Session reconfiguration triggers
|
||||
void networkOnlineStateChanged(bool online); |
||||
void networkConfigurationChange(const QNetworkConfiguration &); |
||||
#endif |
||||
|
||||
private: |
||||
struct ResumeSessionContext; |
||||
|
||||
struct MoveStorageJob |
||||
{ |
||||
lt::torrent_handle torrentHandle; |
||||
Path path; |
||||
MoveStorageMode mode; |
||||
}; |
||||
|
||||
struct RemovingTorrentData |
||||
{ |
||||
QString name; |
||||
Path pathToRemove; |
||||
DeleteOption deleteOption; |
||||
}; |
||||
|
||||
explicit SessionImpl(QObject *parent = nullptr); |
||||
~SessionImpl(); |
||||
|
||||
bool hasPerTorrentRatioLimit() const; |
||||
bool hasPerTorrentSeedingTimeLimit() const; |
||||
|
||||
// Session configuration
|
||||
Q_INVOKABLE void configure(); |
||||
void configureComponents(); |
||||
void initializeNativeSession(); |
||||
void loadLTSettings(lt::settings_pack &settingsPack); |
||||
void configureNetworkInterfaces(lt::settings_pack &settingsPack); |
||||
void configurePeerClasses(); |
||||
void adjustLimits(lt::settings_pack &settingsPack) const; |
||||
void applyBandwidthLimits(lt::settings_pack &settingsPack) const; |
||||
void initMetrics(); |
||||
void adjustLimits(); |
||||
void applyBandwidthLimits(); |
||||
void processBannedIPs(lt::ip_filter &filter); |
||||
QStringList getListeningIPs() const; |
||||
void configureListeningInterface(); |
||||
void enableTracker(bool enable); |
||||
void enableBandwidthScheduler(); |
||||
void populateAdditionalTrackers(); |
||||
void enableIPFilter(); |
||||
void disableIPFilter(); |
||||
void processTrackerStatuses(); |
||||
void populateExcludedFileNamesRegExpList(); |
||||
void prepareStartup(); |
||||
void handleLoadedResumeData(ResumeSessionContext *context); |
||||
void processNextResumeData(ResumeSessionContext *context); |
||||
void endStartup(ResumeSessionContext *context); |
||||
|
||||
LoadTorrentParams initLoadTorrentParams(const AddTorrentParams &addTorrentParams); |
||||
bool addTorrent_impl(const std::variant<MagnetUri, TorrentInfo> &source, const AddTorrentParams &addTorrentParams); |
||||
|
||||
void updateSeedingLimitTimer(); |
||||
void exportTorrentFile(const Torrent *torrent, const Path &folderPath); |
||||
|
||||
void handleAlert(const lt::alert *a); |
||||
void handleAddTorrentAlerts(const std::vector<lt::alert *> &alerts); |
||||
void dispatchTorrentAlert(const lt::torrent_alert *a); |
||||
void handleStateUpdateAlert(const lt::state_update_alert *p); |
||||
void handleMetadataReceivedAlert(const lt::metadata_received_alert *p); |
||||
void handleFileErrorAlert(const lt::file_error_alert *p); |
||||
void handleTorrentRemovedAlert(const lt::torrent_removed_alert *p); |
||||
void handleTorrentDeletedAlert(const lt::torrent_deleted_alert *p); |
||||
void handleTorrentDeleteFailedAlert(const lt::torrent_delete_failed_alert *p); |
||||
void handlePortmapWarningAlert(const lt::portmap_error_alert *p); |
||||
void handlePortmapAlert(const lt::portmap_alert *p); |
||||
void handlePeerBlockedAlert(const lt::peer_blocked_alert *p); |
||||
void handlePeerBanAlert(const lt::peer_ban_alert *p); |
||||
void handleUrlSeedAlert(const lt::url_seed_alert *p); |
||||
void handleListenSucceededAlert(const lt::listen_succeeded_alert *p); |
||||
void handleListenFailedAlert(const lt::listen_failed_alert *p); |
||||
void handleExternalIPAlert(const lt::external_ip_alert *p); |
||||
void handleSessionStatsAlert(const lt::session_stats_alert *p); |
||||
void handleAlertsDroppedAlert(const lt::alerts_dropped_alert *p) const; |
||||
void handleStorageMovedAlert(const lt::storage_moved_alert *p); |
||||
void handleStorageMovedFailedAlert(const lt::storage_moved_failed_alert *p); |
||||
void handleSocks5Alert(const lt::socks5_alert *p) const; |
||||
void handleTrackerAlert(const lt::tracker_alert *a); |
||||
#ifdef QBT_USES_LIBTORRENT2 |
||||
void handleTorrentConflictAlert(const lt::torrent_conflict_alert *a); |
||||
#endif |
||||
|
||||
TorrentImpl *createTorrent(const lt::torrent_handle &nativeHandle, const LoadTorrentParams ¶ms); |
||||
|
||||
void saveResumeData(); |
||||
void saveTorrentsQueue() const; |
||||
void removeTorrentsQueue() const; |
||||
|
||||
std::vector<lt::alert *> getPendingAlerts(lt::time_duration time = lt::time_duration::zero()) const; |
||||
|
||||
void moveTorrentStorage(const MoveStorageJob &job) const; |
||||
void handleMoveTorrentStorageJobFinished(const Path &newPath); |
||||
|
||||
void loadCategories(); |
||||
void storeCategories() const; |
||||
void upgradeCategories(); |
||||
|
||||
// BitTorrent
|
||||
lt::session *m_nativeSession = nullptr; |
||||
|
||||
bool m_deferredConfigureScheduled = false; |
||||
bool m_IPFilteringConfigured = false; |
||||
bool m_listenInterfaceConfigured = false; |
||||
|
||||
CachedSettingValue<bool> m_isDHTEnabled; |
||||
CachedSettingValue<bool> m_isLSDEnabled; |
||||
CachedSettingValue<bool> m_isPeXEnabled; |
||||
CachedSettingValue<bool> m_isIPFilteringEnabled; |
||||
CachedSettingValue<bool> m_isTrackerFilteringEnabled; |
||||
CachedSettingValue<Path> m_IPFilterFile; |
||||
CachedSettingValue<bool> m_announceToAllTrackers; |
||||
CachedSettingValue<bool> m_announceToAllTiers; |
||||
CachedSettingValue<int> m_asyncIOThreads; |
||||
CachedSettingValue<int> m_hashingThreads; |
||||
CachedSettingValue<int> m_filePoolSize; |
||||
CachedSettingValue<int> m_checkingMemUsage; |
||||
CachedSettingValue<int> m_diskCacheSize; |
||||
CachedSettingValue<int> m_diskCacheTTL; |
||||
CachedSettingValue<qint64> m_diskQueueSize; |
||||
CachedSettingValue<DiskIOType> m_diskIOType; |
||||
CachedSettingValue<DiskIOReadMode> m_diskIOReadMode; |
||||
CachedSettingValue<DiskIOWriteMode> m_diskIOWriteMode; |
||||
CachedSettingValue<bool> m_coalesceReadWriteEnabled; |
||||
CachedSettingValue<bool> m_usePieceExtentAffinity; |
||||
CachedSettingValue<bool> m_isSuggestMode; |
||||
CachedSettingValue<int> m_sendBufferWatermark; |
||||
CachedSettingValue<int> m_sendBufferLowWatermark; |
||||
CachedSettingValue<int> m_sendBufferWatermarkFactor; |
||||
CachedSettingValue<int> m_connectionSpeed; |
||||
CachedSettingValue<int> m_socketBacklogSize; |
||||
CachedSettingValue<bool> m_isAnonymousModeEnabled; |
||||
CachedSettingValue<bool> m_isQueueingEnabled; |
||||
CachedSettingValue<int> m_maxActiveDownloads; |
||||
CachedSettingValue<int> m_maxActiveUploads; |
||||
CachedSettingValue<int> m_maxActiveTorrents; |
||||
CachedSettingValue<bool> m_ignoreSlowTorrentsForQueueing; |
||||
CachedSettingValue<int> m_downloadRateForSlowTorrents; |
||||
CachedSettingValue<int> m_uploadRateForSlowTorrents; |
||||
CachedSettingValue<int> m_slowTorrentsInactivityTimer; |
||||
CachedSettingValue<int> m_outgoingPortsMin; |
||||
CachedSettingValue<int> m_outgoingPortsMax; |
||||
CachedSettingValue<int> m_UPnPLeaseDuration; |
||||
CachedSettingValue<int> m_peerToS; |
||||
CachedSettingValue<bool> m_ignoreLimitsOnLAN; |
||||
CachedSettingValue<bool> m_includeOverheadInLimits; |
||||
CachedSettingValue<QString> m_announceIP; |
||||
CachedSettingValue<int> m_maxConcurrentHTTPAnnounces; |
||||
CachedSettingValue<bool> m_isReannounceWhenAddressChangedEnabled; |
||||
CachedSettingValue<int> m_stopTrackerTimeout; |
||||
CachedSettingValue<int> m_maxConnections; |
||||
CachedSettingValue<int> m_maxUploads; |
||||
CachedSettingValue<int> m_maxConnectionsPerTorrent; |
||||
CachedSettingValue<int> m_maxUploadsPerTorrent; |
||||
CachedSettingValue<BTProtocol> m_btProtocol; |
||||
CachedSettingValue<bool> m_isUTPRateLimited; |
||||
CachedSettingValue<MixedModeAlgorithm> m_utpMixedMode; |
||||
CachedSettingValue<bool> m_IDNSupportEnabled; |
||||
CachedSettingValue<bool> m_multiConnectionsPerIpEnabled; |
||||
CachedSettingValue<bool> m_validateHTTPSTrackerCertificate; |
||||
CachedSettingValue<bool> m_SSRFMitigationEnabled; |
||||
CachedSettingValue<bool> m_blockPeersOnPrivilegedPorts; |
||||
CachedSettingValue<bool> m_isAddTrackersEnabled; |
||||
CachedSettingValue<QString> m_additionalTrackers; |
||||
CachedSettingValue<qreal> m_globalMaxRatio; |
||||
CachedSettingValue<int> m_globalMaxSeedingMinutes; |
||||
CachedSettingValue<bool> m_isAddTorrentPaused; |
||||
CachedSettingValue<TorrentContentLayout> m_torrentContentLayout; |
||||
CachedSettingValue<bool> m_isAppendExtensionEnabled; |
||||
CachedSettingValue<int> m_refreshInterval; |
||||
CachedSettingValue<bool> m_isPreallocationEnabled; |
||||
CachedSettingValue<Path> m_torrentExportDirectory; |
||||
CachedSettingValue<Path> m_finishedTorrentExportDirectory; |
||||
CachedSettingValue<int> m_globalDownloadSpeedLimit; |
||||
CachedSettingValue<int> m_globalUploadSpeedLimit; |
||||
CachedSettingValue<int> m_altGlobalDownloadSpeedLimit; |
||||
CachedSettingValue<int> m_altGlobalUploadSpeedLimit; |
||||
CachedSettingValue<bool> m_isAltGlobalSpeedLimitEnabled; |
||||
CachedSettingValue<bool> m_isBandwidthSchedulerEnabled; |
||||
CachedSettingValue<bool> m_isPerformanceWarningEnabled; |
||||
CachedSettingValue<int> m_saveResumeDataInterval; |
||||
CachedSettingValue<int> m_port; |
||||
CachedSettingValue<QString> m_networkInterface; |
||||
CachedSettingValue<QString> m_networkInterfaceName; |
||||
CachedSettingValue<QString> m_networkInterfaceAddress; |
||||
CachedSettingValue<int> m_encryption; |
||||
CachedSettingValue<int> m_maxActiveCheckingTorrents; |
||||
CachedSettingValue<bool> m_isProxyPeerConnectionsEnabled; |
||||
CachedSettingValue<ChokingAlgorithm> m_chokingAlgorithm; |
||||
CachedSettingValue<SeedChokingAlgorithm> m_seedChokingAlgorithm; |
||||
CachedSettingValue<QStringList> m_storedTags; |
||||
CachedSettingValue<int> m_maxRatioAction; |
||||
CachedSettingValue<Path> m_savePath; |
||||
CachedSettingValue<Path> m_downloadPath; |
||||
CachedSettingValue<bool> m_isDownloadPathEnabled; |
||||
CachedSettingValue<bool> m_isSubcategoriesEnabled; |
||||
CachedSettingValue<bool> m_useCategoryPathsInManualMode; |
||||
CachedSettingValue<bool> m_isAutoTMMDisabledByDefault; |
||||
CachedSettingValue<bool> m_isDisableAutoTMMWhenCategoryChanged; |
||||
CachedSettingValue<bool> m_isDisableAutoTMMWhenDefaultSavePathChanged; |
||||
CachedSettingValue<bool> m_isDisableAutoTMMWhenCategorySavePathChanged; |
||||
CachedSettingValue<bool> m_isTrackerEnabled; |
||||
CachedSettingValue<int> m_peerTurnover; |
||||
CachedSettingValue<int> m_peerTurnoverCutoff; |
||||
CachedSettingValue<int> m_peerTurnoverInterval; |
||||
CachedSettingValue<int> m_requestQueueSize; |
||||
CachedSettingValue<bool> m_isExcludedFileNamesEnabled; |
||||
CachedSettingValue<QStringList> m_excludedFileNames; |
||||
CachedSettingValue<QStringList> m_bannedIPs; |
||||
CachedSettingValue<ResumeDataStorageType> m_resumeDataStorageType; |
||||
|
||||
bool m_isRestored = false; |
||||
|
||||
// Order is important. This needs to be declared after its CachedSettingsValue
|
||||
// counterpart, because it uses it for initialization in the constructor
|
||||
// initialization list.
|
||||
const bool m_wasPexEnabled = m_isPeXEnabled; |
||||
|
||||
int m_numResumeData = 0; |
||||
int m_extraLimit = 0; |
||||
QVector<TrackerEntry> m_additionalTrackerList; |
||||
QVector<QRegularExpression> m_excludedFileNamesRegExpList; |
||||
|
||||
bool m_refreshEnqueued = false; |
||||
QTimer *m_seedingLimitTimer = nullptr; |
||||
QTimer *m_resumeDataTimer = nullptr; |
||||
Statistics *m_statistics = nullptr; |
||||
// IP filtering
|
||||
QPointer<FilterParserThread> m_filterParser; |
||||
QPointer<BandwidthScheduler> m_bwScheduler; |
||||
// Tracker
|
||||
QPointer<Tracker> m_tracker; |
||||
|
||||
QThread *m_ioThread = nullptr; |
||||
ResumeDataStorage *m_resumeDataStorage = nullptr; |
||||
FileSearcher *m_fileSearcher = nullptr; |
||||
|
||||
QSet<TorrentID> m_downloadedMetadata; |
||||
|
||||
QHash<TorrentID, TorrentImpl *> m_torrents; |
||||
QHash<TorrentID, LoadTorrentParams> m_loadingTorrents; |
||||
QHash<QString, AddTorrentParams> m_downloadedTorrents; |
||||
QHash<TorrentID, RemovingTorrentData> m_removingTorrents; |
||||
QSet<TorrentID> m_needSaveResumeDataTorrents; |
||||
QHash<TorrentID, TorrentID> m_changedTorrentIDs; |
||||
QMap<QString, CategoryOptions> m_categories; |
||||
QSet<QString> m_tags; |
||||
|
||||
QHash<Torrent *, QSet<QString>> m_updatedTrackerEntries; |
||||
|
||||
// I/O errored torrents
|
||||
QSet<TorrentID> m_recentErroredTorrents; |
||||
QTimer *m_recentErroredTorrentsTimer = nullptr; |
||||
|
||||
SessionMetricIndices m_metricIndices; |
||||
lt::time_point m_statsLastTimestamp = lt::clock_type::now(); |
||||
|
||||
SessionStatus m_status; |
||||
CacheStatus m_cacheStatus; |
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) |
||||
QNetworkConfigurationManager *m_networkManager = nullptr; |
||||
#endif |
||||
|
||||
QList<MoveStorageJob> m_moveStorageQueue; |
||||
|
||||
QString m_lastExternalIP; |
||||
|
||||
bool m_needUpgradeDownloadPath = false; |
||||
|
||||
friend void Session::initInstance(); |
||||
friend void Session::freeInstance(); |
||||
friend Session *Session::instance(); |
||||
static Session *m_instance; |
||||
}; |
||||
} |
Loading…
Reference in new issue