2015-04-19 18:17:47 +03:00
|
|
|
/*
|
|
|
|
* Bittorrent Client using Qt and libtorrent.
|
|
|
|
* Copyright (C) 2015 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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef BITTORRENT_SESSION_H
|
|
|
|
#define BITTORRENT_SESSION_H
|
|
|
|
|
|
|
|
#include <QFile>
|
|
|
|
#include <QHash>
|
2016-02-09 11:56:48 +03:00
|
|
|
#include <QMap>
|
2015-04-19 18:17:47 +03:00
|
|
|
#include <QPointer>
|
|
|
|
#include <QVector>
|
|
|
|
#include <QMutex>
|
|
|
|
#include <QWaitCondition>
|
2015-06-15 01:06:56 +03:00
|
|
|
#include <QNetworkConfigurationManager>
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2016-01-20 10:15:10 +03:00
|
|
|
#include <libtorrent/version.hpp>
|
|
|
|
|
2015-09-25 11:10:05 +03:00
|
|
|
#include "base/tristatebool.h"
|
|
|
|
#include "base/types.h"
|
2015-04-19 18:17:47 +03:00
|
|
|
#include "torrentinfo.h"
|
|
|
|
|
|
|
|
namespace libtorrent
|
|
|
|
{
|
|
|
|
class session;
|
2016-01-20 09:57:02 +03:00
|
|
|
struct torrent_handle;
|
2015-09-25 10:52:25 +03:00
|
|
|
class entry;
|
2015-04-19 18:17:47 +03:00
|
|
|
struct add_torrent_params;
|
|
|
|
struct pe_settings;
|
|
|
|
struct session_settings;
|
|
|
|
struct session_status;
|
|
|
|
|
2016-01-20 10:15:10 +03:00
|
|
|
#if LIBTORRENT_VERSION_NUM < 10100
|
2016-01-20 09:57:02 +03:00
|
|
|
struct proxy_settings;
|
2016-01-20 10:15:10 +03:00
|
|
|
#else
|
|
|
|
namespace aux
|
|
|
|
{
|
|
|
|
struct proxy_settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
typedef aux::proxy_settings proxy_settings;
|
|
|
|
#endif
|
2016-01-20 09:57:02 +03:00
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
class alert;
|
|
|
|
struct torrent_alert;
|
|
|
|
struct state_update_alert;
|
|
|
|
struct stats_alert;
|
|
|
|
struct add_torrent_alert;
|
|
|
|
struct torrent_checked_alert;
|
|
|
|
struct torrent_finished_alert;
|
|
|
|
struct torrent_removed_alert;
|
|
|
|
struct torrent_deleted_alert;
|
2015-08-09 10:27:56 +03:00
|
|
|
struct torrent_delete_failed_alert;
|
2015-04-19 18:17:47 +03:00
|
|
|
struct torrent_paused_alert;
|
|
|
|
struct torrent_resumed_alert;
|
|
|
|
struct save_resume_data_alert;
|
|
|
|
struct save_resume_data_failed_alert;
|
|
|
|
struct file_renamed_alert;
|
|
|
|
struct storage_moved_alert;
|
|
|
|
struct storage_moved_failed_alert;
|
|
|
|
struct metadata_received_alert;
|
|
|
|
struct file_error_alert;
|
|
|
|
struct file_completed_alert;
|
|
|
|
struct tracker_error_alert;
|
|
|
|
struct tracker_reply_alert;
|
|
|
|
struct tracker_warning_alert;
|
|
|
|
struct portmap_error_alert;
|
|
|
|
struct portmap_alert;
|
|
|
|
struct peer_blocked_alert;
|
|
|
|
struct peer_ban_alert;
|
|
|
|
struct fastresume_rejected_alert;
|
|
|
|
struct url_seed_alert;
|
|
|
|
struct listen_succeeded_alert;
|
|
|
|
struct listen_failed_alert;
|
|
|
|
struct external_ip_alert;
|
|
|
|
}
|
|
|
|
|
2015-12-13 15:38:19 +03:00
|
|
|
class QThread;
|
2015-04-19 18:17:47 +03:00
|
|
|
class QTimer;
|
|
|
|
class QStringList;
|
2015-09-25 10:52:25 +03:00
|
|
|
class QString;
|
|
|
|
class QUrl;
|
|
|
|
template<typename T> class QList;
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
class FilterParserThread;
|
|
|
|
class BandwidthScheduler;
|
|
|
|
class Statistics;
|
2015-12-13 15:38:19 +03:00
|
|
|
class ResumeDataSavingManager;
|
2016-02-09 11:56:48 +03:00
|
|
|
class SettingsStorage;
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2016-02-09 11:56:48 +03:00
|
|
|
enum MaxRatioAction
|
|
|
|
{
|
|
|
|
Pause,
|
|
|
|
Remove
|
|
|
|
};
|
|
|
|
|
|
|
|
enum TorrentExportFolder
|
|
|
|
{
|
|
|
|
Regular,
|
|
|
|
Finished
|
|
|
|
};
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
namespace BitTorrent
|
|
|
|
{
|
|
|
|
class InfoHash;
|
|
|
|
class CacheStatus;
|
|
|
|
class SessionStatus;
|
|
|
|
class TorrentHandle;
|
|
|
|
class Tracker;
|
|
|
|
class MagnetUri;
|
|
|
|
class TrackerEntry;
|
|
|
|
struct AddTorrentData;
|
|
|
|
|
|
|
|
struct AddTorrentParams
|
|
|
|
{
|
|
|
|
QString name;
|
2016-02-09 11:56:48 +03:00
|
|
|
QString category;
|
2015-04-19 18:17:47 +03:00
|
|
|
QString savePath;
|
2016-01-01 16:28:40 +03:00
|
|
|
bool disableTempPath = false; // e.g. for imported torrents
|
|
|
|
bool sequential = false;
|
2015-06-04 11:03:19 +03:00
|
|
|
TriStateBool addForced;
|
2015-04-19 18:17:47 +03:00
|
|
|
TriStateBool addPaused;
|
|
|
|
QVector<int> filePriorities; // used if TorrentInfo is set
|
2016-01-01 16:28:40 +03:00
|
|
|
bool ignoreShareRatio = false;
|
|
|
|
bool skipChecking = false;
|
2015-04-19 18:17:47 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
struct TorrentStatusReport
|
|
|
|
{
|
2015-11-05 19:17:10 +03:00
|
|
|
uint nbDownloading = 0;
|
|
|
|
uint nbSeeding = 0;
|
|
|
|
uint nbCompleted = 0;
|
|
|
|
uint nbActive = 0;
|
|
|
|
uint nbInactive = 0;
|
|
|
|
uint nbPaused = 0;
|
|
|
|
uint nbResumed = 0;
|
2015-11-11 09:51:22 +03:00
|
|
|
uint nbErrored = 0;
|
2015-04-19 18:17:47 +03:00
|
|
|
};
|
|
|
|
|
2015-09-25 10:52:25 +03:00
|
|
|
class Session : public QObject
|
2015-04-19 18:17:47 +03:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_DISABLE_COPY(Session)
|
|
|
|
|
|
|
|
public:
|
|
|
|
static void initInstance();
|
|
|
|
static void freeInstance();
|
|
|
|
static Session *instance();
|
|
|
|
|
|
|
|
bool isDHTEnabled() const;
|
|
|
|
bool isLSDEnabled() const;
|
|
|
|
bool isPexEnabled() const;
|
|
|
|
bool isQueueingEnabled() const;
|
|
|
|
qreal globalMaxRatio() const;
|
2015-09-25 10:52:25 +03:00
|
|
|
bool isAppendExtensionEnabled() const;
|
2016-02-09 11:56:48 +03:00
|
|
|
|
2015-09-25 10:52:25 +03:00
|
|
|
QString defaultSavePath() const;
|
2016-02-09 11:56:48 +03:00
|
|
|
void setDefaultSavePath(QString path);
|
2015-09-25 10:52:25 +03:00
|
|
|
QString tempPath() const;
|
2016-02-09 11:56:48 +03:00
|
|
|
void setTempPath(QString path);
|
|
|
|
bool isTempPathEnabled() const;
|
|
|
|
void setTempPathEnabled(bool enabled);
|
2016-04-23 19:34:01 +03:00
|
|
|
QString torrentTempPath(const InfoHash &hash) const;
|
2016-02-09 11:56:48 +03:00
|
|
|
|
|
|
|
static bool isValidCategoryName(const QString &name);
|
|
|
|
// returns category itself and all top level categories
|
|
|
|
static QStringList expandCategory(const QString &category);
|
|
|
|
|
|
|
|
QStringList categories() const;
|
|
|
|
QString categorySavePath(const QString &categoryName) const;
|
|
|
|
bool addCategory(const QString &name, const QString &savePath = "");
|
|
|
|
bool editCategory(const QString &name, const QString &savePath);
|
|
|
|
bool removeCategory(const QString &name);
|
|
|
|
bool isSubcategoriesEnabled() const;
|
|
|
|
void setSubcategoriesEnabled(bool value);
|
|
|
|
|
2016-05-08 22:47:50 +03:00
|
|
|
// Torrent Management Mode subsystem (TMM)
|
2016-02-09 11:56:48 +03:00
|
|
|
//
|
2016-05-08 22:47:50 +03:00
|
|
|
// Each torrent can be either in Manual mode or in Automatic mode
|
|
|
|
// In Manual Mode various torrent properties are set explicitly(eg save path)
|
|
|
|
// In Automatic Mode various torrent properties are set implicitly(eg save path)
|
|
|
|
// based on the associated category.
|
|
|
|
// In Automatic Mode torrent save path can be changed in following cases:
|
2016-02-09 11:56:48 +03:00
|
|
|
// 1. Default save path changed
|
|
|
|
// 2. Torrent category save path changed
|
|
|
|
// 3. Torrent category changed
|
|
|
|
// (unless otherwise is specified)
|
2016-05-08 22:47:50 +03:00
|
|
|
bool isAutoTMMDisabledByDefault() const;
|
|
|
|
void setAutoTMMDisabledByDefault(bool value);
|
|
|
|
bool isDisableAutoTMMWhenCategoryChanged() const;
|
|
|
|
void setDisableAutoTMMWhenCategoryChanged(bool value);
|
|
|
|
bool isDisableAutoTMMWhenDefaultSavePathChanged() const;
|
|
|
|
void setDisableAutoTMMWhenDefaultSavePathChanged(bool value);
|
|
|
|
bool isDisableAutoTMMWhenCategorySavePathChanged() const;
|
|
|
|
void setDisableAutoTMMWhenCategorySavePathChanged(bool value);
|
2016-02-09 11:56:48 +03:00
|
|
|
|
|
|
|
bool isAddTorrentPaused() const;
|
|
|
|
void setAddTorrentPaused(bool value);
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
TorrentHandle *findTorrent(const InfoHash &hash) const;
|
|
|
|
QHash<InfoHash, TorrentHandle *> torrents() const;
|
2015-11-05 19:17:10 +03:00
|
|
|
TorrentStatusReport torrentStatusReport() const;
|
2015-04-19 18:17:47 +03:00
|
|
|
bool hasActiveTorrents() const;
|
|
|
|
bool hasUnfinishedTorrents() const;
|
|
|
|
SessionStatus status() const;
|
|
|
|
CacheStatus cacheStatus() const;
|
|
|
|
quint64 getAlltimeDL() const;
|
|
|
|
quint64 getAlltimeUL() const;
|
|
|
|
int downloadRateLimit() const;
|
|
|
|
int uploadRateLimit() const;
|
|
|
|
bool isListening() const;
|
|
|
|
|
2016-02-09 11:56:48 +03:00
|
|
|
MaxRatioAction maxRatioAction() const;
|
|
|
|
void setMaxRatioAction(MaxRatioAction act);
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
void changeSpeedLimitMode(bool alternative);
|
|
|
|
void setDownloadRateLimit(int rate);
|
|
|
|
void setUploadRateLimit(int rate);
|
|
|
|
void setGlobalMaxRatio(qreal ratio);
|
|
|
|
void enableIPFilter(const QString &filterPath, bool force = false);
|
|
|
|
void disableIPFilter();
|
|
|
|
void banIP(const QString &ip);
|
|
|
|
|
|
|
|
bool isKnownTorrent(const InfoHash &hash) const;
|
|
|
|
bool addTorrent(QString source, const AddTorrentParams ¶ms = AddTorrentParams());
|
|
|
|
bool addTorrent(const TorrentInfo &torrentInfo, const AddTorrentParams ¶ms = AddTorrentParams());
|
|
|
|
bool deleteTorrent(const QString &hash, bool deleteLocalFiles = false);
|
2016-01-07 14:22:35 +03:00
|
|
|
bool loadMetadata(const MagnetUri &magnetUri);
|
2015-04-19 18:17:47 +03:00
|
|
|
bool cancelLoadMetadata(const InfoHash &hash);
|
|
|
|
|
|
|
|
void recursiveTorrentDownload(const InfoHash &hash);
|
|
|
|
void increaseTorrentsPriority(const QStringList &hashes);
|
|
|
|
void decreaseTorrentsPriority(const QStringList &hashes);
|
|
|
|
void topTorrentsPriority(const QStringList &hashes);
|
|
|
|
void bottomTorrentsPriority(const QStringList &hashes);
|
|
|
|
|
2015-09-25 10:52:25 +03:00
|
|
|
// TorrentHandle interface
|
|
|
|
void handleTorrentRatioLimitChanged(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentSavePathChanged(TorrentHandle *const torrent);
|
2016-02-09 11:56:48 +03:00
|
|
|
void handleTorrentCategoryChanged(TorrentHandle *const torrent, const QString &oldCategory);
|
|
|
|
void handleTorrentSavingModeChanged(TorrentHandle *const torrent);
|
2015-09-25 10:52:25 +03:00
|
|
|
void handleTorrentMetadataReceived(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentPaused(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentResumed(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentChecked(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentFinished(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentTrackersAdded(TorrentHandle *const torrent, const QList<TrackerEntry> &newTrackers);
|
|
|
|
void handleTorrentTrackersRemoved(TorrentHandle *const torrent, const QList<TrackerEntry> &deletedTrackers);
|
|
|
|
void handleTorrentTrackersChanged(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentUrlSeedsAdded(TorrentHandle *const torrent, const QList<QUrl> &newUrlSeeds);
|
|
|
|
void handleTorrentUrlSeedsRemoved(TorrentHandle *const torrent, const QList<QUrl> &urlSeeds);
|
|
|
|
void handleTorrentResumeDataReady(TorrentHandle *const torrent, const libtorrent::entry &data);
|
|
|
|
void handleTorrentResumeDataFailed(TorrentHandle *const torrent);
|
|
|
|
void handleTorrentTrackerReply(TorrentHandle *const torrent, const QString &trackerUrl);
|
|
|
|
void handleTorrentTrackerWarning(TorrentHandle *const torrent, const QString &trackerUrl);
|
|
|
|
void handleTorrentTrackerError(TorrentHandle *const torrent, const QString &trackerUrl);
|
|
|
|
void handleTorrentTrackerAuthenticationRequired(TorrentHandle *const torrent, const QString &trackerUrl);
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
signals:
|
2015-11-05 19:17:10 +03:00
|
|
|
void torrentsUpdated();
|
2015-04-19 18:17:47 +03:00
|
|
|
void addTorrentFailed(const QString &error);
|
|
|
|
void torrentAdded(BitTorrent::TorrentHandle *const torrent);
|
2016-04-30 01:38:24 +03:00
|
|
|
void torrentNew(BitTorrent::TorrentHandle *const torrent);
|
2015-04-19 18:17:47 +03:00
|
|
|
void torrentAboutToBeRemoved(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void torrentPaused(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void torrentResumed(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void torrentFinished(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void torrentFinishedChecking(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void torrentSavePathChanged(BitTorrent::TorrentHandle *const torrent);
|
2016-02-09 11:56:48 +03:00
|
|
|
void torrentCategoryChanged(BitTorrent::TorrentHandle *const torrent, const QString &oldCategory);
|
|
|
|
void torrentSavingModeChanged(BitTorrent::TorrentHandle *const torrent);
|
2015-04-19 18:17:47 +03:00
|
|
|
void allTorrentsFinished();
|
|
|
|
void metadataLoaded(const BitTorrent::TorrentInfo &info);
|
|
|
|
void torrentMetadataLoaded(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void fullDiskError(BitTorrent::TorrentHandle *const torrent, const QString &msg);
|
|
|
|
void trackerSuccess(BitTorrent::TorrentHandle *const torrent, const QString &tracker);
|
|
|
|
void trackerWarning(BitTorrent::TorrentHandle *const torrent, const QString &tracker);
|
|
|
|
void trackerError(BitTorrent::TorrentHandle *const torrent, const QString &tracker);
|
|
|
|
void trackerAuthenticationRequired(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void recursiveTorrentDownloadPossible(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void speedLimitModeChanged(bool alternative);
|
|
|
|
void ipFilterParsed(bool error, int ruleCount);
|
|
|
|
void trackersAdded(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
|
|
|
void trackersRemoved(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
|
|
|
void trackersChanged(BitTorrent::TorrentHandle *const torrent);
|
|
|
|
void trackerlessStateChanged(BitTorrent::TorrentHandle *const torrent, bool trackerless);
|
|
|
|
void downloadFromUrlFailed(const QString &url, const QString &reason);
|
|
|
|
void downloadFromUrlFinished(const QString &url);
|
2016-02-09 11:56:48 +03:00
|
|
|
void categoryAdded(const QString &categoryName);
|
|
|
|
void categoryRemoved(const QString &categoryName);
|
|
|
|
void subcategoriesSupportChanged();
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
private slots:
|
|
|
|
void configure();
|
|
|
|
void readAlerts();
|
|
|
|
void refresh();
|
|
|
|
void processBigRatios();
|
|
|
|
void generateResumeData(bool final = false);
|
|
|
|
void handleIPFilterParsed(int ruleCount);
|
|
|
|
void handleIPFilterError();
|
|
|
|
void handleDownloadFinished(const QString &url, const QString &filePath);
|
|
|
|
void handleDownloadFailed(const QString &url, const QString &reason);
|
|
|
|
void handleRedirectedToMagnet(const QString &url, const QString &magnetUri);
|
2015-07-22 08:51:23 +03:00
|
|
|
void switchToAlternativeMode(bool alternative);
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2015-06-15 01:06:56 +03:00
|
|
|
// Session reconfiguration triggers
|
|
|
|
void networkOnlineStateChanged(const bool online);
|
|
|
|
void networkConfigurationChange(const QNetworkConfiguration&);
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
private:
|
|
|
|
explicit Session(QObject *parent = 0);
|
|
|
|
~Session();
|
|
|
|
|
|
|
|
bool hasPerTorrentRatioLimit() const;
|
|
|
|
|
|
|
|
void initResumeFolder();
|
|
|
|
|
|
|
|
// Session configuration
|
|
|
|
void setSessionSettings();
|
|
|
|
void setProxySettings(libtorrent::proxy_settings proxySettings);
|
|
|
|
void adjustLimits();
|
|
|
|
void adjustLimits(libtorrent::session_settings &sessionSettings);
|
2015-11-07 03:06:07 +03:00
|
|
|
const QStringList getListeningIPs();
|
2015-06-15 01:06:56 +03:00
|
|
|
void setListeningPort();
|
2015-04-19 18:17:47 +03:00
|
|
|
void preAllocateAllFiles(bool b);
|
|
|
|
void setMaxConnectionsPerTorrent(int max);
|
|
|
|
void setMaxUploadsPerTorrent(int max);
|
|
|
|
void enableLSD(bool enable);
|
|
|
|
void enableDHT(bool enable);
|
2015-07-22 08:51:23 +03:00
|
|
|
void changeSpeedLimitMode_impl(bool alternative);
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
void setAppendExtension(bool append);
|
|
|
|
|
|
|
|
void startUpTorrents();
|
2015-11-01 09:22:18 +03:00
|
|
|
bool addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri,
|
2016-04-19 09:54:48 +03:00
|
|
|
TorrentInfo torrentInfo = TorrentInfo(),
|
2015-04-19 18:17:47 +03:00
|
|
|
const QByteArray &fastresumeData = QByteArray());
|
2016-04-19 09:54:48 +03:00
|
|
|
bool findIncompleteFiles(TorrentInfo &torrentInfo, QString &savePath) const;
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
void updateRatioTimer();
|
|
|
|
void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular);
|
|
|
|
void saveTorrentResumeData(TorrentHandle *const torrent);
|
|
|
|
|
|
|
|
void handleAlert(libtorrent::alert *a);
|
|
|
|
void dispatchTorrentAlert(libtorrent::alert *a);
|
|
|
|
void handleAddTorrentAlert(libtorrent::add_torrent_alert *p);
|
|
|
|
void handleStateUpdateAlert(libtorrent::state_update_alert *p);
|
|
|
|
void handleMetadataReceivedAlert(libtorrent::metadata_received_alert *p);
|
|
|
|
void handleFileErrorAlert(libtorrent::file_error_alert *p);
|
|
|
|
void handleTorrentRemovedAlert(libtorrent::torrent_removed_alert *p);
|
|
|
|
void handleTorrentDeletedAlert(libtorrent::torrent_deleted_alert *p);
|
2015-08-09 10:27:56 +03:00
|
|
|
void handleTorrentDeleteFailedAlert(libtorrent::torrent_delete_failed_alert *p);
|
2015-04-19 18:17:47 +03:00
|
|
|
void handlePortmapWarningAlert(libtorrent::portmap_error_alert *p);
|
|
|
|
void handlePortmapAlert(libtorrent::portmap_alert *p);
|
|
|
|
void handlePeerBlockedAlert(libtorrent::peer_blocked_alert *p);
|
|
|
|
void handlePeerBanAlert(libtorrent::peer_ban_alert *p);
|
|
|
|
void handleUrlSeedAlert(libtorrent::url_seed_alert *p);
|
|
|
|
void handleListenSucceededAlert(libtorrent::listen_succeeded_alert *p);
|
|
|
|
void handleListenFailedAlert(libtorrent::listen_failed_alert *p);
|
|
|
|
void handleExternalIPAlert(libtorrent::external_ip_alert *p);
|
|
|
|
|
2016-01-20 09:57:02 +03:00
|
|
|
void createTorrentHandle(const libtorrent::torrent_handle &nativeHandle);
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
void saveResumeData();
|
|
|
|
|
2016-04-28 10:56:58 +03:00
|
|
|
#if LIBTORRENT_VERSION_NUM < 10100
|
2015-04-19 18:17:47 +03:00
|
|
|
void dispatchAlerts(std::auto_ptr<libtorrent::alert> alertPtr);
|
2016-04-28 10:56:58 +03:00
|
|
|
#endif
|
|
|
|
void getPendingAlerts(std::vector<libtorrent::alert *> &out, ulong time = 0);
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2016-02-09 11:56:48 +03:00
|
|
|
SettingsStorage *m_settings;
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
// BitTorrent
|
|
|
|
libtorrent::session *m_nativeSession;
|
|
|
|
|
|
|
|
bool m_LSDEnabled;
|
|
|
|
bool m_DHTEnabled;
|
|
|
|
bool m_PeXEnabled;
|
|
|
|
bool m_queueingEnabled;
|
|
|
|
bool m_torrentExportEnabled;
|
|
|
|
bool m_finishedTorrentExportEnabled;
|
|
|
|
bool m_preAllocateAll;
|
|
|
|
qreal m_globalMaxRatio;
|
|
|
|
int m_numResumeData;
|
|
|
|
int m_extraLimit;
|
|
|
|
bool m_appendExtension;
|
|
|
|
uint m_refreshInterval;
|
2016-02-09 11:56:48 +03:00
|
|
|
MaxRatioAction m_maxRatioAction;
|
2015-06-30 21:03:17 +03:00
|
|
|
QList<BitTorrent::TrackerEntry> m_additionalTrackers;
|
2015-04-19 18:17:47 +03:00
|
|
|
QString m_defaultSavePath;
|
|
|
|
QString m_tempPath;
|
|
|
|
QString m_filterPath;
|
|
|
|
QString m_resumeFolderPath;
|
|
|
|
QFile m_resumeFolderLock;
|
|
|
|
QHash<InfoHash, QString> m_savePathsToRemove;
|
|
|
|
|
|
|
|
QTimer *m_refreshTimer;
|
|
|
|
QTimer *m_bigRatioTimer;
|
|
|
|
QTimer *m_resumeDataTimer;
|
|
|
|
Statistics *m_statistics;
|
|
|
|
// IP filtering
|
|
|
|
QPointer<FilterParserThread> m_filterParser;
|
|
|
|
QPointer<BandwidthScheduler> m_bwScheduler;
|
|
|
|
// Tracker
|
|
|
|
QPointer<Tracker> m_tracker;
|
2015-12-13 15:38:19 +03:00
|
|
|
// fastresume data writing thread
|
|
|
|
QThread *m_ioThread;
|
|
|
|
ResumeDataSavingManager *m_resumeDataSavingManager;
|
2015-04-19 18:17:47 +03:00
|
|
|
|
|
|
|
QHash<InfoHash, TorrentInfo> m_loadedMetadata;
|
|
|
|
QHash<InfoHash, TorrentHandle *> m_torrents;
|
|
|
|
QHash<InfoHash, AddTorrentData> m_addingTorrents;
|
|
|
|
QHash<QString, AddTorrentParams> m_downloadedTorrents;
|
2015-11-05 19:17:10 +03:00
|
|
|
TorrentStatusReport m_torrentStatusReport;
|
2016-02-09 11:56:48 +03:00
|
|
|
QStringMap m_categories;
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2016-04-28 10:56:58 +03:00
|
|
|
#if LIBTORRENT_VERSION_NUM < 10100
|
2015-04-19 18:17:47 +03:00
|
|
|
QMutex m_alertsMutex;
|
|
|
|
QWaitCondition m_alertsWaitCondition;
|
2016-04-28 10:56:58 +03:00
|
|
|
std::vector<libtorrent::alert *> m_alerts;
|
|
|
|
#endif
|
2015-04-19 18:17:47 +03:00
|
|
|
|
2015-06-15 01:06:56 +03:00
|
|
|
QNetworkConfigurationManager m_networkManager;
|
|
|
|
|
2015-04-19 18:17:47 +03:00
|
|
|
static Session *m_instance;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // BITTORRENT_SESSION_H
|