From 8ea34135e4e7c0d17d7b96aae8ca30e71dbb37d2 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sat, 27 Oct 2007 20:53:09 +0000 Subject: [PATCH] - BUGFIX: Catching DHT exception in case there is a problem --- Changelog | 1 + TODO | 3 ++- src/GUI.cpp | 9 ++++++--- src/bittorrent.cpp | 20 +++++++++++++------- src/bittorrent.h | 2 +- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Changelog b/Changelog index 0da6c16b3..52a26cc74 100644 --- a/Changelog +++ b/Changelog @@ -65,6 +65,7 @@ - BUGFIX: ETA was wrong for torrents with filtered files - BUGFIX: Fixed drag'n drop on non-KDE systems - BUGFIX: Removed build dependency on Python + - BUGFIX: Catching DHT exception in case there is a problem - COSMETIC: Redesigned torrent properties a little - COSMETIC: Totally redesigned program preferences - COSMETIC: Display more logs messages concerning features diff --git a/TODO b/TODO index 76567aa8d..e6a47121b 100644 --- a/TODO +++ b/TODO @@ -57,5 +57,6 @@ - Translations update (IN PROGRESS) rc6->rc7 changelog: -- Removed build dependency on Python +- BUGFIX: Catching DHT exception in case there is a problem +- BUGFIX: Removed build dependency on Python - I18N: Updated Turkish translation \ No newline at end of file diff --git a/src/GUI.cpp b/src/GUI.cpp index a1e38947a..0414c8a53 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -884,11 +884,14 @@ void GUI::configureSession(bool deleteOptions) { BTSession->setMaxUploadsPerTorrent(options->getMaxUploadsPerTorrent()); // * DHT if(options->isDHTEnabled()) { - BTSession->enableDHT(true); - downloadingTorrentTab->setInfoBar(tr("DHT support [ON], port: %1").arg(new_listenPort), QString::fromUtf8("blue")); // Set DHT Port BTSession->setDHTPort(new_listenPort); - }else{ + if(BTSession->enableDHT(true)) { + downloadingTorrentTab->setInfoBar(tr("DHT support [ON], port: %1").arg(new_listenPort), QString::fromUtf8("blue")); + } else { + downloadingTorrentTab->setInfoBar(tr("DHT support [OFF]"), QString::fromUtf8("red")); + } + } else { BTSession->enableDHT(false); downloadingTorrentTab->setInfoBar(tr("DHT support [OFF]"), QString::fromUtf8("blue")); } diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index c7ea4b58f..5436bb25f 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -639,7 +639,7 @@ void bittorrent::enableLSD(bool b) { } // Enable DHT -void bittorrent::enableDHT(bool b) { +bool bittorrent::enableDHT(bool b) { if(b) { if(!DHTEnabled) { boost::filesystem::ifstream dht_state_file((misc::qBittorrentPath()+QString::fromUtf8("dht_state")).toUtf8().data(), std::ios_base::binary); @@ -648,12 +648,17 @@ void bittorrent::enableDHT(bool b) { try{ dht_state = bdecode(std::istream_iterator(dht_state_file), std::istream_iterator()); }catch (std::exception&) {} - s->start_dht(dht_state); - s->add_dht_router(std::make_pair(std::string("router.bittorrent.com"), 6881)); - s->add_dht_router(std::make_pair(std::string("router.utorrent.com"), 6881)); - s->add_dht_router(std::make_pair(std::string("router.bitcomet.com"), 6881)); - DHTEnabled = true; - qDebug("DHT enabled"); + try { + s->start_dht(dht_state); + s->add_dht_router(std::make_pair(std::string("router.bittorrent.com"), 6881)); + s->add_dht_router(std::make_pair(std::string("router.utorrent.com"), 6881)); + s->add_dht_router(std::make_pair(std::string("router.bitcomet.com"), 6881)); + DHTEnabled = true; + qDebug("DHT enabled"); + }catch(std::exception e) { + qDebug("Could not enable DHT, reason: %s", e.what()); + return false; + } } } else { if(DHTEnabled) { @@ -662,6 +667,7 @@ void bittorrent::enableDHT(bool b) { qDebug("DHT disabled"); } } + return true; } void bittorrent::saveTorrentSpeedLimits(QString hash) { diff --git a/src/bittorrent.h b/src/bittorrent.h index 383f3a238..0899e4e03 100644 --- a/src/bittorrent.h +++ b/src/bittorrent.h @@ -135,7 +135,7 @@ class bittorrent : public QObject{ void enableUPnP(bool b); void enableNATPMP(bool b); void enableLSD(bool b); - void enableDHT(bool b); + bool enableDHT(bool b); protected slots: void scanDirectory();