diff --git a/src/init/basic.cpp b/src/init/basic.cpp new file mode 100644 index 00000000000..12d468c0af9 --- /dev/null +++ b/src/init/basic.cpp @@ -0,0 +1,26 @@ +// Copyright (c) 2025 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 +#include + +namespace init { +namespace { +class BitcoinBasicInit : public interfaces::Init +{ +public: + BitcoinBasicInit(const char* exe_name, const char* process_argv0) : m_ipc(interfaces::MakeIpc(exe_name, process_argv0, *this)) {} + interfaces::Ipc* ipc() override { return m_ipc.get(); } +private: + std::unique_ptr m_ipc; +}; +} // namespace +} // namespace init + +namespace interfaces { +std::unique_ptr MakeBasicInit(const char* exe_name, const char* process_argv0) +{ + return std::make_unique(exe_name, process_argv0); +} +} // namespace interfaces diff --git a/src/interfaces/init.h b/src/interfaces/init.h index 463d43e7c2e..f214b2878fb 100644 --- a/src/interfaces/init.h +++ b/src/interfaces/init.h @@ -55,6 +55,25 @@ std::unique_ptr MakeWalletInit(int argc, char* argv[], int& exit_status); //! Return implementation of Init interface for the gui process. std::unique_ptr MakeGuiInit(int argc, char* argv[]); + +//! Return implementation of Init interface for a basic IPC client that doesn't +//! provide any IPC services itself. +//! +//! When an IPC client connects to a socket or spawns a process, it gets a pointer +//! to an Init object allowing it to create objects and threads on the remote +//! side of the IPC connection. But the client also needs to provide a local Init +//! object to allow the remote side of the connection to create objects and +//! threads on this side. This function just returns a basic Init object +//! allowing remote connections to only create local threads, not other objects +//! (because its Init::make* methods return null.) +//! +//! @param exe_name Current executable name, which is just passed to the IPC +//! system and used for logging. +//! +//! @param process_argv0 Optional string containing argv[0] value passed to +//! main(). This is passed to the IPC system and used to locate binaries by +//! relative path if subprocesses are spawned. +std::unique_ptr MakeBasicInit(const char* exe_name, const char* process_argv0=""); } // namespace interfaces #endif // BITCOIN_INTERFACES_INIT_H