Bitcoin Core  27.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 <config/bitcoin-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 
19 namespace node {
21 {
22  // Pre-release build warning
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 
43 std::vector<bilingual_str> Warnings::GetMessages() const
44 {
45  LOCK(m_mutex);
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 
54 UniValue 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
#define CLIENT_VERSION_IS_RELEASE
@ 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:18
#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