Bitcoin Core 28.99.0
P2P Digital Currency
|
The Transport converts one connection's sent messages to wire bytes, and received bytes back. More...
#include <net.h>
Classes | |
struct | Info |
Public Types | |
using | BytesToSend = std::tuple< Span< const uint8_t >, bool, const std::string & > |
Return type for GetBytesToSend, consisting of: More... | |
Public Member Functions | |
virtual | ~Transport ()=default |
virtual Info | GetInfo () const noexcept=0 |
Retrieve information about this transport. More... | |
virtual bool | ReceivedMessageComplete () const =0 |
Returns true if the current message is complete (so GetReceivedMessage can be called). More... | |
virtual bool | ReceivedBytes (Span< const uint8_t > &msg_bytes)=0 |
Feed wire bytes to the transport. More... | |
virtual CNetMessage | GetReceivedMessage (std::chrono::microseconds time, bool &reject_message)=0 |
Retrieve a completed message from transport. More... | |
virtual bool | SetMessageToSend (CSerializedNetMsg &msg) noexcept=0 |
Set the next message to send. More... | |
virtual BytesToSend | GetBytesToSend (bool have_next_message) const noexcept=0 |
Get bytes to send on the wire, if any, along with other information about it. More... | |
virtual void | MarkBytesSent (size_t bytes_sent) noexcept=0 |
Report how many bytes returned by the last GetBytesToSend() have been sent. More... | |
virtual size_t | GetSendMemoryUsage () const noexcept=0 |
Return the memory usage of this transport attributable to buffered data to send. More... | |
virtual bool | ShouldReconnectV1 () const noexcept=0 |
Whether upon disconnections, a reconnect with V1 is warranted. More... | |
The Transport converts one connection's sent messages to wire bytes, and received bytes back.
using Transport::BytesToSend = std::tuple< Span<const uint8_t> , bool , const std::string& > |
Return type for GetBytesToSend, consisting of:
|
virtualdefault |
|
pure virtualnoexcept |
Get bytes to send on the wire, if any, along with other information about it.
As a const function, it does not modify the transport's observable state, and is thus safe to be called multiple times.
[in] | have_next_message | If true, the "more" return value reports whether more will be sendable after a SetMessageToSend call. It is set by the caller when they know they have another message ready to send, and only care about what happens after that. The have_next_message argument only affects this "more" return value and nothing else. |
Effectively, there are three possible outcomes about whether there are more bytes to send:
The boolean 'more' is true for Yes, false for Blocked, and have_next_message controls what is returned for No.
Implemented in V1Transport, and V2Transport.
|
pure virtualnoexcept |
Retrieve information about this transport.
Implemented in V1Transport, and V2Transport.
|
pure virtual |
Retrieve a completed message from transport.
This can only be called when ReceivedMessageComplete() is true.
If reject_message=true is returned the message itself is invalid, but (other than false returned by ReceivedBytes) the transport is not in an inconsistent state.
Implemented in V2Transport, and V1Transport.
|
pure virtualnoexcept |
Return the memory usage of this transport attributable to buffered data to send.
Implemented in V1Transport, and V2Transport.
|
pure virtualnoexcept |
Report how many bytes returned by the last GetBytesToSend() have been sent.
bytes_sent cannot exceed to_send.size() of the last GetBytesToSend() result.
If bytes_sent=0, this call has no effect.
Implemented in V1Transport, and V2Transport.
|
pure virtual |
Feed wire bytes to the transport.
Consumed bytes are chopped off the front of msg_bytes.
Implemented in V2Transport, and V1Transport.
|
pure virtual |
Returns true if the current message is complete (so GetReceivedMessage can be called).
Implemented in V2Transport, and V1Transport.
|
pure virtualnoexcept |
Set the next message to send.
If no message can currently be set (perhaps because the previous one is not yet done being sent), returns false, and msg will be unmodified. Otherwise msg is enqueued (and possibly moved-from) and true is returned.
Implemented in V1Transport, and V2Transport.
|
pure virtualnoexcept |
Whether upon disconnections, a reconnect with V1 is warranted.
Implemented in V1Transport, and V2Transport.