Branch data Line data Source code
1 : : // Copyright (c) 2023 The Bitcoin Core developers 2 : : // Distributed under the MIT software license, see the accompanying 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : : 5 : : #ifndef BITCOIN_NODE_KERNEL_NOTIFICATIONS_H 6 : : #define BITCOIN_NODE_KERNEL_NOTIFICATIONS_H 7 : : 8 : : #include <kernel/notifications_interface.h> 9 : : 10 : : #include <atomic> 11 : : #include <cstdint> 12 : : #include <string> 13 : : 14 : : class ArgsManager; 15 : : class CBlockIndex; 16 : : enum class SynchronizationState; 17 : : struct bilingual_str; 18 : : 19 : : namespace util { 20 : : class SignalInterrupt; 21 : : } // namespace util 22 : : 23 : : namespace node { 24 : : 25 : : static constexpr int DEFAULT_STOPATHEIGHT{0}; 26 : : 27 : 0 : class KernelNotifications : public kernel::Notifications 28 : : { 29 : : public: 30 : 0 : KernelNotifications(util::SignalInterrupt& shutdown, std::atomic<int>& exit_status) : m_shutdown(shutdown), m_exit_status{exit_status} {} 31 : : 32 : : [[nodiscard]] kernel::InterruptResult blockTip(SynchronizationState state, CBlockIndex& index) override; 33 : : 34 : : void headerTip(SynchronizationState state, int64_t height, int64_t timestamp, bool presync) override; 35 : : 36 : : void progress(const bilingual_str& title, int progress_percent, bool resume_possible) override; 37 : : 38 : : void warning(const bilingual_str& warning) override; 39 : : 40 : : void flushError(const std::string& debug_message) override; 41 : : 42 : : void fatalError(const std::string& debug_message, const bilingual_str& user_message = {}) override; 43 : : 44 : : //! Block height after which blockTip notification will return Interrupted{}, if >0. 45 : 0 : int m_stop_at_height{DEFAULT_STOPATHEIGHT}; 46 : : //! Useful for tests, can be set to false to avoid shutdown on fatal error. 47 : 0 : bool m_shutdown_on_fatal_error{true}; 48 : : private: 49 : : util::SignalInterrupt& m_shutdown; 50 : : std::atomic<int>& m_exit_status; 51 : : }; 52 : : 53 : : void ReadNotificationArgs(const ArgsManager& args, KernelNotifications& notifications); 54 : : 55 : : } // namespace node 56 : : 57 : : #endif // BITCOIN_NODE_KERNEL_NOTIFICATIONS_H