protocol.h
1 // Copyright (c) 2021 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_IPC_PROTOCOL_H 6 #define BITCOIN_IPC_PROTOCOL_H 7 8 #include <interfaces/init.h> 9 10 #include <functional> 11 #include <memory> 12 #include <typeindex> 13 14 namespace ipc { 15 struct Context; 16 17 //! IPC protocol interface for calling IPC methods over sockets. 18 //! 19 //! There may be different implementations of this interface for different IPC 20 //! protocols (e.g. Cap'n Proto, gRPC, JSON-RPC, or custom protocols). 21 class Protocol 22 { 23 public: 24 virtual ~Protocol() = default; 25 26 //! Return Init interface that forwards requests over given socket descriptor. 27 //! Socket communication is handled on a background thread. 28 virtual std::unique_ptr<interfaces::Init> connect(int fd, const char* exe_name) = 0; 29 30 //! Handle requests on provided socket descriptor, forwarding them to the 31 //! provided Init interface. Socket communication is handled on the 32 //! current thread, and this call blocks until the socket is closed. 33 virtual void serve(int fd, const char* exe_name, interfaces::Init& init) = 0; 34 35 //! Add cleanup callback to interface that will run when the interface is 36 //! deleted. 37 virtual void addCleanup(std::type_index type, void* iface, std::function<void()> cleanup) = 0; 38 39 //! Context accessor. 40 virtual Context& context() = 0; 41 }; 42 } // namespace ipc 43 44 #endif // BITCOIN_IPC_PROTOCOL_H