Bitcoin Core 31.99.0
P2P Digital Currency
Public Member Functions | List of all members
ipc::Protocol Class Referenceabstract

IPC protocol interface for calling IPC methods over sockets. More...

#include <protocol.h>

Public Member Functions

virtual ~Protocol ()=default
 
virtual std::unique_ptr< interfaces::Initconnect (mp::Stream stream)=0
 Return Init interface that forwards requests over given connection stream. More...
 
virtual void listen (mp::SocketId listen_fd, interfaces::Init &init)=0
 Listen for connections on provided socket id, accept them, and handle requests on accepted connections. More...
 
virtual void serve (interfaces::Init &init, const std::function< mp::Stream()> &make_stream)=0
 Handle requests from a stream provided by the make_stream callback, forwarding them to the provided Init interface. More...
 
virtual mp::Stream makeStream (mp::SocketId socket)=0
 Make stream object from socket id. More...
 
virtual void disconnectIncoming ()=0
 Disconnect any incoming connections that are still connected. More...
 
virtual void addCleanup (std::type_index type, void *iface, std::function< void()> cleanup)=0
 Add cleanup callback to interface that will run when the interface is deleted. More...
 
virtual Contextcontext ()=0
 Context accessor. More...
 

Detailed Description

IPC protocol interface for calling IPC methods over sockets.

There may be different implementations of this interface for different IPC protocols (e.g. Cap'n Proto, gRPC, JSON-RPC, or custom protocols).

Definition at line 22 of file protocol.h.

Constructor & Destructor Documentation

◆ ~Protocol()

virtual ipc::Protocol::~Protocol ( )
virtualdefault

Member Function Documentation

◆ addCleanup()

virtual void ipc::Protocol::addCleanup ( std::type_index  type,
void *  iface,
std::function< void()>  cleanup 
)
pure virtual

Add cleanup callback to interface that will run when the interface is deleted.

◆ connect()

virtual std::unique_ptr< interfaces::Init > ipc::Protocol::connect ( mp::Stream  stream)
pure virtual

Return Init interface that forwards requests over given connection stream.

Socket communication is handled on a background thread.

Note
It could be potentially useful in the future to add std::function<void()> on_disconnect callback argument here. But there isn't an immediate need, because the protocol implementation can clean up its own state (calling ProxyServer destructors, etc) on disconnect, and any client calls will just throw ipc::Exception errors after a disconnect.

◆ context()

virtual Context & ipc::Protocol::context ( )
pure virtual

Context accessor.

◆ disconnectIncoming()

virtual void ipc::Protocol::disconnectIncoming ( )
pure virtual

Disconnect any incoming connections that are still connected.

◆ listen()

virtual void ipc::Protocol::listen ( mp::SocketId  listen_fd,
interfaces::Init init 
)
pure virtual

Listen for connections on provided socket id, accept them, and handle requests on accepted connections.

This method doesn't block, and performs I/O on a background thread.

◆ makeStream()

virtual mp::Stream ipc::Protocol::makeStream ( mp::SocketId  socket)
pure virtual

Make stream object from socket id.

◆ serve()

virtual void ipc::Protocol::serve ( interfaces::Init init,
const std::function< mp::Stream()> &  make_stream 
)
pure virtual

Handle requests from a stream provided by the make_stream callback, forwarding them to the provided Init interface.

Socket communication is handled on the current thread, and this call blocks until the socket is closed. A callback is used to specify the stream because this method initializes the event loop and it may not be possible to create the stream before the event loop is initialized.

Note
: If this method is called, it needs to be called before connect() or listen() methods, because for ease of implementation this method is inflexible and always runs the event loop in the foreground thread. It can share its event loop with the other methods but can't share an event loop that was created by them. This isn't a problem because serve() is only called by spawned child processes that call it immediately to communicate back with parent processes.

The documentation for this class was generated from the following file: