aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheCharlatan <seb.kung@gmail.com>2023-05-08 14:49:37 +0200
committerTheCharlatan <seb.kung@gmail.com>2023-05-20 12:03:28 +0200
commitf871c69191dfe1331861ebcdbadb6bd47e45c8b1 (patch)
tree0d49b26710c40cba814c1b820f2cc935ebd48b62
parent4452707edec91c7d7991f486dd41ef3edb4f7fbf (diff)
kernel: Add warning method to notifications
This commit is part of the libbitcoinkernel project and seeks to remove the ChainstateManager's and, more generally, the kernel library's dependency on interface_ui with options methods in this and the following few commits. By removing interface_ui from the kernel library, its dependency on boost is reduced to just boost::multi_index. The DoWarning and AlertNotify functions are moved out of the validation.cpp file, which removes its dependency on interface_ui as well as util/system.
-rw-r--r--src/bitcoin-chainstate.cpp4
-rw-r--r--src/kernel/notifications_interface.h1
-rw-r--r--src/node/kernel_notifications.cpp48
-rw-r--r--src/node/kernel_notifications.h2
-rw-r--r--src/validation.cpp34
5 files changed, 56 insertions, 33 deletions
diff --git a/src/bitcoin-chainstate.cpp b/src/bitcoin-chainstate.cpp
index b949bafcc8..6ee1ff4594 100644
--- a/src/bitcoin-chainstate.cpp
+++ b/src/bitcoin-chainstate.cpp
@@ -99,6 +99,10 @@ int main(int argc, char* argv[])
{
std::cout << "Progress: " << title.original << ", " << progress_percent << ", " << resume_possible << std::endl;
}
+ void warning(const bilingual_str& warning) override
+ {
+ std::cout << "Warning: " << warning.original << std::endl;
+ }
};
auto notifications = std::make_unique<KernelNotifications>();
diff --git a/src/kernel/notifications_interface.h b/src/kernel/notifications_interface.h
index 1d5643ca07..48248e9aa0 100644
--- a/src/kernel/notifications_interface.h
+++ b/src/kernel/notifications_interface.h
@@ -26,6 +26,7 @@ public:
virtual void blockTip(SynchronizationState state, CBlockIndex& index) {}
virtual void headerTip(SynchronizationState state, int64_t height, int64_t timestamp, bool presync) {}
virtual void progress(const bilingual_str& title, int progress_percent, bool resume_possible) {}
+ virtual void warning(const bilingual_str& warning) {}
};
} // namespace kernel
diff --git a/src/node/kernel_notifications.cpp b/src/node/kernel_notifications.cpp
index 9efbc6c4ca..2bc4544aee 100644
--- a/src/node/kernel_notifications.cpp
+++ b/src/node/kernel_notifications.cpp
@@ -4,8 +4,51 @@
#include <node/kernel_notifications.h>
+#if defined(HAVE_CONFIG_H)
+#include <config/bitcoin-config.h>
+#endif
+
+#include <common/args.h>
#include <node/interface_ui.h>
+#include <util/strencodings.h>
+#include <util/string.h>
+#include <util/system.h>
#include <util/translation.h>
+#include <warnings.h>
+
+#include <cstdint>
+#include <string>
+#include <thread>
+
+static void AlertNotify(const std::string& strMessage)
+{
+ uiInterface.NotifyAlertChanged();
+#if HAVE_SYSTEM
+ std::string strCmd = gArgs.GetArg("-alertnotify", "");
+ if (strCmd.empty()) return;
+
+ // Alert text should be plain ascii coming from a trusted source, but to
+ // be safe we first strip anything not in safeChars, then add single quotes around
+ // the whole string before passing it to the shell:
+ std::string singleQuote("'");
+ std::string safeStatus = SanitizeString(strMessage);
+ safeStatus = singleQuote+safeStatus+singleQuote;
+ ReplaceAll(strCmd, "%s", safeStatus);
+
+ std::thread t(runCommand, strCmd);
+ t.detach(); // thread runs free
+#endif
+}
+
+static void DoWarning(const bilingual_str& warning)
+{
+ static bool fWarned = false;
+ SetMiscWarning(warning);
+ if (!fWarned) {
+ AlertNotify(warning.original);
+ fWarned = true;
+ }
+}
namespace node {
@@ -24,4 +67,9 @@ void KernelNotifications::progress(const bilingual_str& title, int progress_perc
uiInterface.ShowProgress(title.translated, progress_percent, resume_possible);
}
+void KernelNotifications::warning(const bilingual_str& warning)
+{
+ DoWarning(warning);
+}
+
} // namespace node
diff --git a/src/node/kernel_notifications.h b/src/node/kernel_notifications.h
index ecd21c3a58..3e665bbf14 100644
--- a/src/node/kernel_notifications.h
+++ b/src/node/kernel_notifications.h
@@ -23,6 +23,8 @@ public:
void headerTip(SynchronizationState state, int64_t height, int64_t timestamp, bool presync) override;
void progress(const bilingual_str& title, int progress_percent, bool resume_possible) override;
+
+ void warning(const bilingual_str& warning) override;
};
} // namespace node
diff --git a/src/validation.cpp b/src/validation.cpp
index 46b5b3e8ef..86c5c4d161 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -27,7 +27,6 @@
#include <logging.h>
#include <logging/timer.h>
#include <node/blockstorage.h>
-#include <node/interface_ui.h>
#include <node/utxo_snapshot.h>
#include <policy/policy.h>
#include <policy/rbf.h>
@@ -53,7 +52,6 @@
#include <util/moneystr.h>
#include <util/rbf.h>
#include <util/strencodings.h>
-#include <util/system.h>
#include <util/time.h>
#include <util/trace.h>
#include <util/translation.h>
@@ -1641,26 +1639,6 @@ bool Chainstate::IsInitialBlockDownload() const
return false;
}
-static void AlertNotify(const std::string& strMessage)
-{
- uiInterface.NotifyAlertChanged();
-#if HAVE_SYSTEM
- std::string strCmd = gArgs.GetArg("-alertnotify", "");
- if (strCmd.empty()) return;
-
- // Alert text should be plain ascii coming from a trusted source, but to
- // be safe we first strip anything not in safeChars, then add single quotes around
- // the whole string before passing it to the shell:
- std::string singleQuote("'");
- std::string safeStatus = SanitizeString(strMessage);
- safeStatus = singleQuote+safeStatus+singleQuote;
- ReplaceAll(strCmd, "%s", safeStatus);
-
- std::thread t(runCommand, strCmd);
- t.detach(); // thread runs free
-#endif
-}
-
void Chainstate::CheckForkWarningConditions()
{
AssertLockHeld(cs_main);
@@ -2601,16 +2579,6 @@ void Chainstate::PruneAndFlush()
}
}
-static void DoWarning(const bilingual_str& warning)
-{
- static bool fWarned = false;
- SetMiscWarning(warning);
- if (!fWarned) {
- AlertNotify(warning.original);
- fWarned = true;
- }
-}
-
/** Private helper function that concatenates warning messages. */
static void AppendWarning(bilingual_str& res, const bilingual_str& warn)
{
@@ -2677,7 +2645,7 @@ void Chainstate::UpdateTip(const CBlockIndex* pindexNew)
if (state == ThresholdState::ACTIVE || state == ThresholdState::LOCKED_IN) {
const bilingual_str warning = strprintf(_("Unknown new rules activated (versionbit %i)"), bit);
if (state == ThresholdState::ACTIVE) {
- DoWarning(warning);
+ m_chainman.GetNotifications().warning(warning);
} else {
AppendWarning(warning_messages, warning);
}