Bitcoin Core 28.99.0
P2P Digital Currency
warnings.cpp
Go to the documentation of this file.
1// Copyright (c) 2009-2010 Satoshi Nakamoto
2// Copyright (c) 2009-2022 The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#include <bitcoin-build-config.h> // IWYU pragma: keep
7
8#include <node/warnings.h>
9
10#include <common/system.h>
11#include <node/interface_ui.h>
12#include <sync.h>
13#include <univalue.h>
14#include <util/translation.h>
15
16#include <utility>
17#include <vector>
18
19namespace node {
21{
22 // Pre-release build warning
23 if (!CLIENT_VERSION_IS_RELEASE) {
24 m_warnings.insert(
26 _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications")});
27 }
28}
30{
31 const auto& [_, inserted]{WITH_LOCK(m_mutex, return m_warnings.insert({id, std::move(message)}))};
32 if (inserted) uiInterface.NotifyAlertChanged();
33 return inserted;
34}
35
37{
38 auto success{WITH_LOCK(m_mutex, return m_warnings.erase(id))};
39 if (success) uiInterface.NotifyAlertChanged();
40 return success;
41}
42
43std::vector<bilingual_str> Warnings::GetMessages() const
44{
46 std::vector<bilingual_str> messages;
47 messages.reserve(m_warnings.size());
48 for (const auto& [id, msg] : m_warnings) {
49 messages.push_back(msg);
50 }
51 return messages;
52}
53
54UniValue GetWarningsForRpc(const Warnings& warnings, bool use_deprecated)
55{
56 if (use_deprecated) {
57 const auto all_messages{warnings.GetMessages()};
58 return all_messages.empty() ? "" : all_messages.back().original;
59 }
60
62 for (auto&& message : warnings.GetMessages()) {
63 messages.push_back(std::move(message.original));
64 }
65 return messages;
66}
67} // namespace node
@ VARR
Definition: univalue.h:24
Manages warning messages within a node.
Definition: warnings.h:40
std::variant< kernel::Warning, node::Warning > warning_type
Definition: warnings.h:41
bool Unset(warning_type id) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Unset a warning message.
Definition: warnings.cpp:36
Mutex m_mutex
Definition: warnings.h:43
bool Set(warning_type id, bilingual_str message) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Set a warning message.
Definition: warnings.cpp:29
std::vector< bilingual_str > GetMessages() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Return potential problems detected by the node, sorted by the warning_type id.
Definition: warnings.cpp:43
CClientUIInterface uiInterface
Definition: messages.h:20
UniValue GetWarningsForRpc(const Warnings &warnings, bool use_deprecated)
RPC helper function that wraps warnings.GetMessages().
Definition: warnings.cpp:54
Bilingual messages:
Definition: translation.h:21
#define LOCK(cs)
Definition: sync.h:257
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
Definition: sync.h:301
bilingual_str _(ConstevalStringLiteral str)
Translation function.
Definition: translation.h:80