diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index e15466fbf..e852defb1 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -659,7 +659,7 @@ void Session::setSessionSettings() // Include overhead in transfer limits sessionSettings.rate_limit_ip_overhead = pref->includeOverheadInLimits(); // IP address to announce to trackers - sessionSettings.announce_ip = Utils::String::toStdString(pref->getNetworkAddress()); + sessionSettings.announce_ip = Utils::String::toStdString(pref->getAnnounceAddress()); // Super seeding sessionSettings.strict_super_seeding = pref->isSuperSeedingEnabled(); // * Max Half-open connections @@ -1734,6 +1734,13 @@ const QStringList Session::getListeningIPs() Logger* const logger = Logger::instance(); QStringList IPs; + //Take the override addresss + const QString networkAddr = pref->getNetworkAddress(); + if ( !networkAddr.isEmpty()) { + IPs.append( networkAddr); + return IPs; + } + const QString ifaceName = pref->getNetworkInterface(); const bool listenIPv6 = pref->getListenIPv6(); diff --git a/src/base/preferences.cpp b/src/base/preferences.cpp index b2b16bc1f..cfca0a723 100644 --- a/src/base/preferences.cpp +++ b/src/base/preferences.cpp @@ -1339,6 +1339,16 @@ QString Preferences::getNetworkInterfaceName() const return value("Preferences/Connection/InterfaceName").toString(); } +void Preferences::setNetworkAddress(const QString& iface) +{ + setValue("Preferences/Connection/InterfaceAddress", iface); +} + +QString Preferences::getNetworkAddress() const +{ + return value("Preferences/Connection/InterfaceAddress").toString(); +} + void Preferences::setNetworkInterfaceName(const QString& iface) { setValue("Preferences/Connection/InterfaceName", iface); @@ -1354,14 +1364,14 @@ void Preferences::setListenIPv6(bool enable) setValue("Preferences/Connection/InterfaceListenIPv6", enable); } -QString Preferences::getNetworkAddress() const +QString Preferences::getAnnounceAddress() const { - return value("Preferences/Connection/InetAddress").toString(); + return value("Preferences/Connection/AnnounceAddress").toString(); } -void Preferences::setNetworkAddress(const QString& addr) +void Preferences::setAnnounceAddress(const QString& addr) { - setValue("Preferences/Connection/InetAddress", addr); + setValue("Preferences/Connection/AnnounceAddress", addr); } bool Preferences::isAnonymousModeEnabled() const diff --git a/src/base/preferences.h b/src/base/preferences.h index 584765432..741030849 100644 --- a/src/base/preferences.h +++ b/src/base/preferences.h @@ -361,12 +361,14 @@ public: void setMaxHalfOpenConnections(int value); QString getNetworkInterface() const; void setNetworkInterface(const QString& iface); + QString getNetworkAddress() const; + void setNetworkAddress(const QString& iface); QString getNetworkInterfaceName() const; void setNetworkInterfaceName(const QString& iface); bool getListenIPv6() const; void setListenIPv6(bool enable); - QString getNetworkAddress() const; - void setNetworkAddress(const QString& addr); + QString getAnnounceAddress() const; + void setAnnounceAddress(const QString& addr); bool isAnonymousModeEnabled() const; void enableAnonymousMode(bool enabled); bool isSuperSeedingEnabled() const; diff --git a/src/gui/advancedsettings.cpp b/src/gui/advancedsettings.cpp index 0f62e3e34..71ca120dd 100644 --- a/src/gui/advancedsettings.cpp +++ b/src/gui/advancedsettings.cpp @@ -47,6 +47,8 @@ enum AdvSettingsRows QBITTORRENT_HEADER, // network interface NETWORK_IFACE, + //Optional bind address + NETWORK_ADDRESS, NETWORK_LISTEN_IPV6, // behavior SAVE_RESUME_DATA_INTERVAL, @@ -83,7 +85,7 @@ enum AdvSettingsRows // tracker TRACKER_EXCHANGE, ANNOUNCE_ALL_TRACKERS, - NETWORK_ADDRESS, + ANNOUNCE_ADDRESS, ROW_COUNT }; @@ -147,11 +149,18 @@ void AdvancedSettings::saveAdvancedSettings() // Listen on IPv6 address pref->setListenIPv6(cb_listen_ipv6.isChecked()); // Network address - QHostAddress addr(txt_network_address.text().trimmed()); - if (addr.isNull()) + QHostAddress networkAddr(txt_network_address.text().trimmed()); + if (networkAddr.isNull()) pref->setNetworkAddress(""); else - pref->setNetworkAddress(addr.toString()); + pref->setNetworkAddress(networkAddr.toString()); + // Announce address + QHostAddress announceAddr(txt_announce_address.text().trimmed()); + if (announceAddr.isNull()) + pref->setAnnounceAddress(""); + else + pref->setAnnounceAddress(announceAddr.toString()); + // Program notification MainWindow * const mainWindow = static_cast(QCoreApplication::instance())->mainWindow(); mainWindow->setNotificationsEnabled(cb_program_notifications.isChecked()); @@ -287,7 +296,11 @@ void AdvancedSettings::loadAdvancedSettings() addRow(NETWORK_LISTEN_IPV6, tr("Listen on IPv6 address (requires restart)"), &cb_listen_ipv6); // Network address txt_network_address.setText(pref->getNetworkAddress()); - addRow(NETWORK_ADDRESS, tr("IP Address to report to trackers (requires restart)"), &txt_network_address); + addRow(NETWORK_ADDRESS, tr("IP Address to bind to( requires restart))"), &txt_network_address); + // Network address + txt_announce_address.setText(pref->getAnnounceAddress()); + addRow(ANNOUNCE_ADDRESS, tr("IP Address to report to trackers (requires restart)"), &txt_announce_address); + // Program notifications const MainWindow * const mainWindow = static_cast(QCoreApplication::instance())->mainWindow(); cb_program_notifications.setChecked(mainWindow->isNotificationsEnabled()); diff --git a/src/gui/advancedsettings.h b/src/gui/advancedsettings.h index 30fecd1d4..91691d2da 100644 --- a/src/gui/advancedsettings.h +++ b/src/gui/advancedsettings.h @@ -63,6 +63,7 @@ private: cb_super_seeding, cb_program_notifications, cb_torrent_added_notifications, cb_tracker_status, cb_confirm_torrent_recheck, cb_enable_tracker_ext, cb_listen_ipv6, cb_announce_all_trackers; QComboBox combo_iface; + QLineEdit txt_announce_address; QLineEdit txt_network_address; // OS dependent settings