=== modified file 'dcpp/ConnectivityManager.cpp' --- dcpp/ConnectivityManager.cpp 2013-01-18 21:28:38 +0000 +++ dcpp/ConnectivityManager.cpp 2014-01-17 20:25:24 +0000 @@ -33,8 +33,15 @@ ConnectivityManager::ConnectivityManager() : autoDetected(false), -running(false) -{ +running(false), +lastFullUpdate(GET_TICK()) +{ + TimerManager::getInstance()->addListener(this); +} + +ConnectivityManager::~ConnectivityManager() +{ + TimerManager::getInstance()->removeListener(this); } bool ConnectivityManager::get(SettingsManager::BoolSetting setting) const { @@ -234,6 +241,7 @@ disconnect(); autoSettings[SettingsManager::INCOMING_CONNECTIONS] = SettingsManager::INCOMING_PASSIVE; log(_("Active mode could not be achieved; a manual configuration is recommended for better connectivity")); + autoDetected = false; } else { SettingsManager::getInstance()->set(SettingsManager::MAPPER, mapper); } @@ -286,4 +294,25 @@ ConnectionManager::getInstance()->disconnect(); } +void ConnectivityManager::on(TimerManagerListener::Minute, uint64_t tick) noexcept { + if(autoDetected) + { + return; + } + + if(!SETTING(AUTO_DETECT_CONNECTION)) + { + return; + } + + int refreshTime = SETTING(AUTO_RETRY_CONNECTION_TIME); + if(refreshTime > 0) { + if(lastFullUpdate + refreshTime * 60 * 1000 <= tick) { + detectConnection(); + + lastFullUpdate = GET_TICK(); + } + } +} + } // namespace dcpp === modified file 'dcpp/ConnectivityManager.h' --- dcpp/ConnectivityManager.h 2013-12-06 00:08:00 +0000 +++ dcpp/ConnectivityManager.h 2014-01-17 19:49:21 +0000 @@ -22,6 +22,7 @@ #include "SettingsManager.h" #include "Singleton.h" #include "Speaker.h" +#include "TimerManager.h" #include #include @@ -48,7 +49,7 @@ virtual void on(SettingChanged) noexcept { } }; -class ConnectivityManager : public Singleton, public Speaker +class ConnectivityManager : public Singleton, public Speaker, private TimerManagerListener { public: bool get(SettingsManager::BoolSetting setting) const; @@ -69,7 +70,7 @@ friend class MappingManager; ConnectivityManager(); - virtual ~ConnectivityManager() { } + virtual ~ConnectivityManager(); void startMapping(); void mappingFinished(const string& mapper); @@ -84,10 +85,15 @@ string status; + uint64_t lastFullUpdate; + /* contains auto-detected settings. they are stored separately from manual connectivity settings (stored in SettingsManager) in case the user wants to keep the manually set ones for future use. */ unordered_map> autoSettings; + + // TimerManagerListener + virtual void on(TimerManagerListener::Minute, uint64_t tick) noexcept; }; #define CONNSETTING(k) ConnectivityManager::getInstance()->get(SettingsManager::k) === modified file 'dcpp/SettingsManager.cpp' --- dcpp/SettingsManager.cpp 2013-12-06 21:45:24 +0000 +++ dcpp/SettingsManager.cpp 2014-01-17 20:26:10 +0000 @@ -84,6 +84,7 @@ "MaxFilelistSize", "MaxHashSpeed", "MaxMessageLines", "MaxPMWindows", "MinMessageLines", "MinUploadSpeed", "PMLastLogLines", "SearchHistory", "SetMinislotSize", "SettingsSaveInterval", "Slots", "TabStyle", "TabWidth", "ToolbarSize", "AutoSearchInterval", + "AutoRetryConnectionTime", "SENTRY", // Bools "AddFinishedInstantly", "AdlsBreakOnFirst", @@ -359,6 +360,7 @@ setDefault(SHARING_SKIPLIST_PATHS, Util::emptyString); setDefault(SHARING_SKIPLIST_MINSIZE, 0); setDefault(SHARING_SKIPLIST_MAXSIZE, 0); + setDefault(AUTO_RETRY_CONNECTION_TIME, 60); setSearchTypeDefaults(); === modified file 'dcpp/SettingsManager.h' --- dcpp/SettingsManager.h 2013-11-01 18:38:32 +0000 +++ dcpp/SettingsManager.h 2014-01-17 20:26:43 +0000 @@ -119,7 +119,7 @@ MAX_FILELIST_SIZE, MAX_HASH_SPEED, MAX_MESSAGE_LINES, MAX_PM_WINDOWS, MIN_MESSAGE_LINES, MIN_UPLOAD_SPEED, PM_LAST_LOG_LINES, SEARCH_HISTORY, SET_MINISLOT_SIZE, SETTINGS_SAVE_INTERVAL, SLOTS, TAB_STYLE, TAB_WIDTH, TOOLBAR_SIZE, - AUTO_SEARCH_INTERVAL, + AUTO_SEARCH_INTERVAL, AUTO_RETRY_CONNECTION_TIME, INT_LAST }; === modified file 'help/settings_expert.html' --- help/settings_expert.html 2013-11-10 21:06:28 +0000 +++ help/settings_expert.html 2014-01-17 20:39:52 +0000 @@ -58,6 +58,9 @@
Max protocol command length
The amount of protocol data DC++ will maximally manage. This setting help protect against potentially malicious clients and hubs. Measured in bytes. (default: 524288 bytes)
+
Auto connection retry interval
+
The interval with which DC++ will automatically retry to detect the best connectivity settings, if they are enabled. + Measured in minutes. (default: 60 minutes)
=== modified file 'win32/ExpertsPage.cpp' --- win32/ExpertsPage.cpp 2013-11-10 21:06:28 +0000 +++ win32/ExpertsPage.cpp 2014-01-17 20:37:09 +0000 @@ -53,6 +53,7 @@ addItem(T_("Socket write buffer"), SettingsManager::SOCKET_OUT_BUFFER, true, IDH_SETTINGS_EXPERT_SOCKET_OUT_BUFFER, T_("B")); addItem(T_("Max PM windows"), SettingsManager::MAX_PM_WINDOWS, true, IDH_SETTINGS_EXPERT_MAX_PM_WINDOWS); addItem(T_("Max protocol command length"), SettingsManager::MAX_COMMAND_LENGTH, true, IDH_SETTINGS_EXPERT_MAX_COMMAND_LENGTH, T_("B")); + addItem(T_("Auto connection retry interval"), SettingsManager::AUTO_RETRY_CONNECTION_TIME, true, IDH_SETTINGS_EXPERT_AUTO_RETRY_CONNECTION_TIME, T_("minutes")); PropPage::read(items); }