Changeset View
Changeset View
Standalone View
Standalone View
src/warnings.cpp
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <warnings.h> | #include <warnings.h> | ||||
#include <clientversion.h> | #include <clientversion.h> | ||||
#include <sync.h> | #include <sync.h> | ||||
#include <util/string.h> | |||||
#include <util/system.h> | #include <util/system.h> | ||||
#include <util/translation.h> | #include <util/translation.h> | ||||
#include <vector> | |||||
static Mutex g_warnings_mutex; | static Mutex g_warnings_mutex; | ||||
static std::string strMiscWarning GUARDED_BY(g_warnings_mutex); | static bilingual_str g_misc_warnings GUARDED_BY(g_warnings_mutex); | ||||
static bool fLargeWorkForkFound GUARDED_BY(g_warnings_mutex) = false; | static bool fLargeWorkForkFound GUARDED_BY(g_warnings_mutex) = false; | ||||
static bool fLargeWorkInvalidChainFound GUARDED_BY(g_warnings_mutex) = false; | static bool fLargeWorkInvalidChainFound GUARDED_BY(g_warnings_mutex) = false; | ||||
void SetMiscWarning(const std::string &strWarning) { | void SetMiscWarning(const bilingual_str &warning) { | ||||
LOCK(g_warnings_mutex); | LOCK(g_warnings_mutex); | ||||
strMiscWarning = strWarning; | g_misc_warnings = warning; | ||||
} | } | ||||
void SetfLargeWorkForkFound(bool flag) { | void SetfLargeWorkForkFound(bool flag) { | ||||
LOCK(g_warnings_mutex); | LOCK(g_warnings_mutex); | ||||
fLargeWorkForkFound = flag; | fLargeWorkForkFound = flag; | ||||
} | } | ||||
bool GetfLargeWorkForkFound() { | bool GetfLargeWorkForkFound() { | ||||
LOCK(g_warnings_mutex); | LOCK(g_warnings_mutex); | ||||
return fLargeWorkForkFound; | return fLargeWorkForkFound; | ||||
} | } | ||||
void SetfLargeWorkInvalidChainFound(bool flag) { | void SetfLargeWorkInvalidChainFound(bool flag) { | ||||
LOCK(g_warnings_mutex); | LOCK(g_warnings_mutex); | ||||
fLargeWorkInvalidChainFound = flag; | fLargeWorkInvalidChainFound = flag; | ||||
} | } | ||||
std::string GetWarnings(bool verbose) { | bilingual_str GetWarnings(bool verbose) { | ||||
std::string warnings_concise; | bilingual_str warnings_concise; | ||||
std::string warnings_verbose; | std::vector<bilingual_str> warnings_verbose; | ||||
const std::string warning_separator = "<hr />"; | |||||
LOCK(g_warnings_mutex); | LOCK(g_warnings_mutex); | ||||
// Pre-release build warning | // Pre-release build warning | ||||
if (!CLIENT_VERSION_IS_RELEASE) { | if (!CLIENT_VERSION_IS_RELEASE) { | ||||
warnings_concise = | warnings_concise = _( | ||||
"This is a pre-release test build - use at your own risk - do not " | "This is a pre-release test build - use at your own risk - do not " | ||||
"use for mining or merchant applications"; | "use for mining or merchant applications"); | ||||
warnings_verbose = | warnings_verbose.emplace_back(warnings_concise); | ||||
_("This is a pre-release test build - use at your own risk - do " | |||||
"not use for mining or merchant applications") | |||||
.translated; | |||||
} | } | ||||
// Misc warnings like out of disk space and clock is wrong | // Misc warnings like out of disk space and clock is wrong | ||||
if (strMiscWarning != "") { | if (!g_misc_warnings.empty()) { | ||||
warnings_concise = strMiscWarning; | warnings_concise = g_misc_warnings; | ||||
warnings_verbose += | warnings_verbose.emplace_back(warnings_concise); | ||||
(warnings_verbose.empty() ? "" : warning_separator) + | |||||
strMiscWarning; | |||||
} | } | ||||
if (fLargeWorkForkFound) { | if (fLargeWorkForkFound) { | ||||
warnings_concise = | warnings_concise = _( | ||||
"Warning: The network does not appear to fully agree! Some miners " | "Warning: The network does not appear to fully agree! Some miners " | ||||
"appear to be experiencing issues."; | "appear to be experiencing issues."); | ||||
warnings_verbose += | warnings_verbose.emplace_back(warnings_concise); | ||||
(warnings_verbose.empty() ? "" : warning_separator) + | |||||
_("Warning: The network does not appear to fully agree! Some " | |||||
"miners appear to be experiencing issues.") | |||||
.translated; | |||||
} else if (fLargeWorkInvalidChainFound) { | } else if (fLargeWorkInvalidChainFound) { | ||||
warnings_concise = | warnings_concise = _( | ||||
"Warning: We do not appear to fully agree with our peers! You may " | "Warning: We do not appear to fully agree with our peers! You may " | ||||
"need to upgrade, or other nodes may need to upgrade."; | "need to upgrade, or other nodes may need to upgrade."); | ||||
warnings_verbose += | warnings_verbose.emplace_back(warnings_concise); | ||||
(warnings_verbose.empty() ? "" : warning_separator) + | |||||
_("Warning: We do not appear to fully agree with our peers! You " | |||||
"may need to upgrade, or other nodes may need to upgrade.") | |||||
.translated; | |||||
} | } | ||||
if (verbose) { | if (verbose) { | ||||
return warnings_verbose; | return Join(warnings_verbose, Untranslated("<hr />")); | ||||
} else { | |||||
return warnings_concise; | |||||
} | } | ||||
return warnings_concise; | |||||
} | } |