/ src / ipc / protocol.h
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