Browse Source

- Clean up of bittorrent class

adaptive-webui-19844
Christophe Dumez 15 years ago
parent
commit
d5e2905ead
  1. 36
      src/bittorrent.cpp
  2. 284
      src/bittorrent.h

36
src/bittorrent.cpp

@ -62,7 +62,7 @@
enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4}; enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4};
// Main constructor // Main constructor
bittorrent::bittorrent() : DHTEnabled(false), preAllocateAll(false), addInPause(false), ratio_limit(-1), UPnPEnabled(false), NATPMPEnabled(false), LSDEnabled(false), queueingEnabled(false), geoipDBLoaded(false) { bittorrent::bittorrent() : preAllocateAll(false), addInPause(false), ratio_limit(-1), UPnPEnabled(false), NATPMPEnabled(false), LSDEnabled(false), DHTEnabled(false), queueingEnabled(false), geoipDBLoaded(false) {
resolve_countries = false; resolve_countries = false;
// To avoid some exceptions // To avoid some exceptions
fs::path::default_name_check(fs::no_check); fs::path::default_name_check(fs::no_check);
@ -204,7 +204,7 @@ void bittorrent::configureSession() {
qDebug("Configuring session"); qDebug("Configuring session");
// Downloads // Downloads
// * Save path // * Save path
setDefaultSavePath(Preferences::getSavePath()); defaultSavePath = Preferences::getSavePath();
if(Preferences::isTempPathEnabled()) { if(Preferences::isTempPathEnabled()) {
setDefaultTempPath(Preferences::getTempPath()); setDefaultTempPath(Preferences::getTempPath());
} else { } else {
@ -1271,10 +1271,6 @@ void bittorrent::addTorrentsFromScanFolder(QStringList &pathList) {
} }
} }
void bittorrent::setDefaultSavePath(QString savepath) {
defaultSavePath = savepath;
}
QString bittorrent::getDefaultSavePath() const { QString bittorrent::getDefaultSavePath() const {
return defaultSavePath; return defaultSavePath;
} }
@ -1297,6 +1293,7 @@ void bittorrent::setDefaultTempPath(QString temppath) {
h.move_storage(getSavePath(h.hash())); h.move_storage(getSavePath(h.hash()));
} }
} else { } else {
// Moving all downloading torrents to temporary save path
std::vector<torrent_handle> torrents = getTorrents(); std::vector<torrent_handle> torrents = getTorrents();
std::vector<torrent_handle>::iterator torrentIT; std::vector<torrent_handle>::iterator torrentIT;
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
@ -1597,12 +1594,8 @@ void bittorrent::readAlerts() {
if(h.is_valid()){ if(h.is_valid()){
// Authentication // Authentication
if(p->status_code != 401) { if(p->status_code != 401) {
QString hash = h.hash(); qDebug("Received a tracker error for %s: %s", p->url.c_str(), p->msg.c_str());
qDebug("Received a tracker error for %s", p->url.c_str()); trackersErrors[h.hash()][misc::toQString(p->url)] = misc::toQString(p->message());
QHash<QString, QString> errors = trackersErrors.value(hash, QHash<QString, QString>());
// p->url requires at least libtorrent v0.13.1
errors[misc::toQString(p->url)] = QString::fromUtf8(a->message().c_str());
trackersErrors[hash] = errors;
} else { } else {
emit trackerAuthenticationRequired(h); emit trackerAuthenticationRequired(h);
} }
@ -1611,12 +1604,21 @@ void bittorrent::readAlerts() {
else if (tracker_reply_alert* p = dynamic_cast<tracker_reply_alert*>(a.get())) { else if (tracker_reply_alert* p = dynamic_cast<tracker_reply_alert*>(a.get())) {
QTorrentHandle h(p->handle); QTorrentHandle h(p->handle);
if(h.is_valid()){ if(h.is_valid()){
qDebug("Received a tracker reply from %s", (const char*)h.current_tracker().toLocal8Bit()); qDebug("Received a tracker reply from %s", h.current_tracker().toLocal8Bit().data());
QString hash = h.hash(); // Connection was successful now. Remove possible old errors
QHash<QString, QString> errors = trackersErrors.value(hash, QHash<QString, QString>()); QHash<QString, QString> errors = trackersErrors.value(h.hash(), QHash<QString, QString>());
// p->url requires at least libtorrent v0.13.1 errors.remove(h.current_tracker());
trackersErrors[h.hash()] = errors;
}
} else if (tracker_warning_alert* p = dynamic_cast<tracker_warning_alert*>(a.get())) {
QTorrentHandle h(p->handle);
if(h.is_valid()){
// Connection was successful now. Remove possible old errors
QHash<QString, QString> errors = trackersErrors.value(h.hash(), QHash<QString, QString>());
errors.remove(h.current_tracker()); errors.remove(h.current_tracker());
trackersErrors[hash] = errors; trackersErrors[h.hash()] = errors;
qDebug("Received a tracker warning from %s: %s", h.current_tracker().toLocal8Bit().data(), p->msg.c_str());
// XXX: The tracker warning is silently ignored... do something with it.
} }
} }
else if (portmap_error_alert* p = dynamic_cast<portmap_error_alert*>(a.get())) { else if (portmap_error_alert* p = dynamic_cast<portmap_error_alert*>(a.get())) {

284
src/bittorrent.h

@ -53,149 +53,157 @@ class HttpServer;
class bittorrent : public QObject { class bittorrent : public QObject {
Q_OBJECT Q_OBJECT
private: private:
session *s; // Bittorrent
QPointer<FileSystemWatcher> FSWatcher; session *s;
QPointer<QTimer> timerAlerts; QPointer<QTimer> timerAlerts;
QPointer<QTimer> BigRatioTimer; QHash<QString, QString> savepath_fromurl;
bool DHTEnabled; QHash<QString, QHash<QString, QString> > trackersErrors;
QPointer<downloadThread> downloader; // Ratio
QString defaultSavePath; QPointer<QTimer> BigRatioTimer;
QString defaultTempPath; // HTTP
QHash<QString, QHash<QString, QString> > trackersErrors; QPointer<downloadThread> downloader;
QStringList consoleMessages; // File System
QStringList peerBanMessages; QPointer<FileSystemWatcher> FSWatcher;
bool preAllocateAll; // Console / Log
bool addInPause; QStringList consoleMessages;
float ratio_limit; QStringList peerBanMessages;
bool UPnPEnabled; // Settings
bool NATPMPEnabled; bool preAllocateAll;
bool LSDEnabled; bool addInPause;
QPointer<FilterParserThread> filterParser; float ratio_limit;
QString filterPath; bool UPnPEnabled;
bool queueingEnabled; bool NATPMPEnabled;
QStringList url_skippingDlg; bool LSDEnabled;
QHash<QString, QString> savepath_fromurl; bool DHTEnabled;
bool resolve_countries; bool queueingEnabled;
bool geoipDBLoaded; QString defaultSavePath;
QPointer<QTimer> timerETA; QString defaultTempPath;
QHash<QString, QList<int> > ETA_samples; // GeoIP
// Web UI bool resolve_countries;
QPointer<HttpServer> httpServer; bool geoipDBLoaded;
// ETA Computation
QPointer<QTimer> timerETA;
QHash<QString, QList<int> > ETA_samples;
// IP filtering
QPointer<FilterParserThread> filterParser;
QString filterPath;
// Web UI
QPointer<HttpServer> httpServer;
QStringList url_skippingDlg;
protected: protected:
QString getSavePath(QString hash); QString getSavePath(QString hash);
bool initWebUi(QString username, QString password, int port); bool initWebUi(QString username, QString password, int port);
public: public:
// Constructor / Destructor // Constructor / Destructor
bittorrent(); bittorrent();
~bittorrent(); ~bittorrent();
QTorrentHandle getTorrentHandle(QString hash) const; QTorrentHandle getTorrentHandle(QString hash) const;
std::vector<torrent_handle> getTorrents() const; std::vector<torrent_handle> getTorrents() const;
bool isFilePreviewPossible(QString fileHash) const; bool isFilePreviewPossible(QString fileHash) const;
bool isDHTEnabled() const; bool isDHTEnabled() const;
float getPayloadDownloadRate() const; float getPayloadDownloadRate() const;
float getPayloadUploadRate() const; float getPayloadUploadRate() const;
session_status getSessionStatus() const; session_status getSessionStatus() const;
int getListenPort() const; int getListenPort() const;
float getRealRatio(QString hash) const; float getRealRatio(QString hash) const;
session* getSession() const; session* getSession() const;
QHash<QString, QString> getTrackersErrors(QString hash) const; QHash<QString, QString> getTrackersErrors(QString hash) const;
bool has_filtered_files(QString hash) const; bool has_filtered_files(QString hash) const;
bool hasActiveTorrents() const; bool hasActiveTorrents() const;
bool isQueueingEnabled() const; bool isQueueingEnabled() const;
int getMaximumActiveDownloads() const; int getMaximumActiveDownloads() const;
int getMaximumActiveTorrents() const; int getMaximumActiveTorrents() const;
int loadTorrentPriority(QString hash); int loadTorrentPriority(QString hash);
QStringList getConsoleMessages() const; QStringList getConsoleMessages() const;
QStringList getPeerBanMessages() const; QStringList getPeerBanMessages() const;
qlonglong getETA(QString hash); qlonglong getETA(QString hash);
bool useTemporaryFolder() const; bool useTemporaryFolder() const;
QString getDefaultSavePath() const; QString getDefaultSavePath() const;
public slots: public slots:
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false); QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false); QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
void importOldTorrents(); void importOldTorrents();
void applyFormerAttributeFiles(QTorrentHandle h); void applyFormerAttributeFiles(QTorrentHandle h);
void importOldTempData(QString torrent_path); void importOldTempData(QString torrent_path);
void loadSessionState(); void loadSessionState();
void saveSessionState(); void saveSessionState();
void downloadFromUrl(QString url); void downloadFromUrl(QString url);
void deleteTorrent(QString hash, bool delete_local_files = false); void deleteTorrent(QString hash, bool delete_local_files = false);
void startUpTorrents(); void startUpTorrents();
/* Needed by Web UI */ /* Needed by Web UI */
void pauseAllTorrents(); void pauseAllTorrents();
void pauseTorrent(QString hash); void pauseTorrent(QString hash);
void resumeTorrent(QString hash); void resumeTorrent(QString hash);
void resumeAllTorrents(); void resumeAllTorrents();
/* End Web UI */ /* End Web UI */
void saveDHTEntry(); void saveDHTEntry();
void preAllocateAllFiles(bool b); void preAllocateAllFiles(bool b);
void saveFastResumeData(); void saveFastResumeData();
void enableDirectoryScanning(QString scan_dir); void enableDirectoryScanning(QString scan_dir);
void disableDirectoryScanning(); void disableDirectoryScanning();
void enableIPFilter(QString filter); void enableIPFilter(QString filter);
void disableIPFilter(); void disableIPFilter();
void setQueueingEnabled(bool enable); void setQueueingEnabled(bool enable);
void handleDownloadFailure(QString url, QString reason); void handleDownloadFailure(QString url, QString reason);
void loadWebSeeds(QString fileHash); void loadWebSeeds(QString fileHash);
void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null); void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null);
// Session configuration - Setters // Session configuration - Setters
void setListeningPort(int port); void setListeningPort(int port);
void setMaxConnections(int maxConnec); void setMaxConnections(int maxConnec);
void setMaxConnectionsPerTorrent(int max); void setMaxConnectionsPerTorrent(int max);
void setMaxUploadsPerTorrent(int max); void setMaxUploadsPerTorrent(int max);
void setDownloadRateLimit(long rate); void setDownloadRateLimit(long rate);
void setUploadRateLimit(long rate); void setUploadRateLimit(long rate);
void setGlobalRatio(float ratio); void setGlobalRatio(float ratio);
void setDeleteRatio(float ratio); void setDeleteRatio(float ratio);
void setDHTPort(int dht_port); void setDHTPort(int dht_port);
void setProxySettings(proxy_settings proxySettings, bool trackers=true, bool peers=true, bool web_seeds=true, bool dht=true); void setProxySettings(proxy_settings proxySettings, bool trackers=true, bool peers=true, bool web_seeds=true, bool dht=true);
void setSessionSettings(session_settings sessionSettings); void setSessionSettings(session_settings sessionSettings);
void startTorrentsInPause(bool b); void startTorrentsInPause(bool b);
void setDefaultSavePath(QString savepath); void setDefaultTempPath(QString temppath);
void setDefaultTempPath(QString temppath); void applyEncryptionSettings(pe_settings se);
void applyEncryptionSettings(pe_settings se); void loadFilesPriorities(QTorrentHandle& h);
void loadFilesPriorities(QTorrentHandle& h); void setDownloadLimit(QString hash, long val);
void setDownloadLimit(QString hash, long val); void setUploadLimit(QString hash, long val);
void setUploadLimit(QString hash, long val); void enableUPnP(bool b);
void enableUPnP(bool b); void enableNATPMP(bool b);
void enableNATPMP(bool b); void enableLSD(bool b);
void enableLSD(bool b); bool enableDHT(bool b);
bool enableDHT(bool b); void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText));
void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText)); void addPeerBanMessage(QString msg, bool from_ipfilter);
void addPeerBanMessage(QString msg, bool from_ipfilter); void processDownloadedFile(QString, QString);
void processDownloadedFile(QString, QString); void saveTrackerFile(QString hash);
void saveTrackerFile(QString hash); void addMagnetSkipAddDlg(QString uri);
void addMagnetSkipAddDlg(QString uri); void downloadFromURLList(const QStringList& urls);
void downloadFromURLList(const QStringList& urls); void configureSession();
void configureSession(); void banIP(QString ip);
void banIP(QString ip);
protected slots: protected slots:
void addTorrentsFromScanFolder(QStringList&); void addTorrentsFromScanFolder(QStringList&);
void readAlerts(); void readAlerts();
void loadTrackerFile(QString hash); void loadTrackerFile(QString hash);
void deleteBigRatios(); void deleteBigRatios();
void takeETASamples(); void takeETASamples();
signals: signals:
void addedTorrent(QTorrentHandle& h); void addedTorrent(QTorrentHandle& h);
void deletedTorrent(QString hash); void deletedTorrent(QString hash);
void pausedTorrent(QTorrentHandle& h); void pausedTorrent(QTorrentHandle& h);
void resumedTorrent(QTorrentHandle& h); void resumedTorrent(QTorrentHandle& h);
void finishedTorrent(QTorrentHandle& h); void finishedTorrent(QTorrentHandle& h);
void fullDiskError(QTorrentHandle& h, QString msg); void fullDiskError(QTorrentHandle& h, QString msg);
void trackerError(QString hash, QString time, QString msg); void trackerError(QString hash, QString time, QString msg);
void trackerAuthenticationRequired(QTorrentHandle& h); void trackerAuthenticationRequired(QTorrentHandle& h);
void newDownloadedTorrent(QString path, QString url); void newDownloadedTorrent(QString path, QString url);
void updateFileSize(QString hash); void updateFileSize(QString hash);
void downloadFromUrlFailure(QString url, QString reason); void downloadFromUrlFailure(QString url, QString reason);
void torrentFinishedChecking(QTorrentHandle& h); void torrentFinishedChecking(QTorrentHandle& h);
void metadataReceived(QTorrentHandle &h); void metadataReceived(QTorrentHandle &h);
void torrentPaused(QTorrentHandle &h); void torrentPaused(QTorrentHandle &h);
}; };
#endif #endif

Loading…
Cancel
Save