// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2016 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "sync.h" #include "clientversion.h" #include "util.h" #include "warnings.h" #include "alert.h" #include "uint256.h" CCriticalSection cs_warnings; std::string strMiscWarning; bool fLargeWorkForkFound = false; bool fLargeWorkInvalidChainFound = false; void SetMiscWarning(const std::string& strWarning) { LOCK(cs_warnings); strMiscWarning = strWarning; } std::string GetMiscWarning() { LOCK(cs_warnings); return strMiscWarning; } void SetfLargeWorkForkFound(bool flag) { LOCK(cs_warnings); fLargeWorkForkFound = flag; } bool GetfLargeWorkForkFound() { LOCK(cs_warnings); return fLargeWorkForkFound; } void SetfLargeWorkInvalidChainFound(bool flag) { LOCK(cs_warnings); fLargeWorkInvalidChainFound = flag; } bool GetfLargeWorkInvalidChainFound() { LOCK(cs_warnings); return fLargeWorkInvalidChainFound; } std::string GetWarnings(const std::string& strFor) { int nPriority = 0; std::string strStatusBar; std::string strRPC; LOCK(cs_warnings); if (!CLIENT_VERSION_IS_RELEASE) strStatusBar = _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"); if (GetBoolArg("-testsafemode", DEFAULT_TESTSAFEMODE)) strStatusBar = strRPC = "testsafemode enabled"; // Misc warnings like out of disk space and clock is wrong if (strMiscWarning != "") { nPriority = 1000; strStatusBar = strMiscWarning; } if (fLargeWorkForkFound) { nPriority = 2000; strStatusBar = strRPC = _("Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues."); } else if (fLargeWorkInvalidChainFound) { nPriority = 2000; strStatusBar = strRPC = _("Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade."); } // Alerts { LOCK(cs_mapAlerts); for (const std::pair& item : mapAlerts) { const CAlert& alert = item.second; if (alert.AppliesToMe() && alert.nPriority > nPriority) { nPriority = alert.nPriority; strStatusBar = alert.strStatusBar; if (alert.nPriority >= ALERT_PRIORITY_SAFE_MODE) { strRPC = alert.strRPCError; } } } } if (strFor == "statusbar") return strStatusBar; else if (strFor == "rpc") return strRPC; assert(!"GetWarnings(): invalid parameter"); return "error"; }