#include <net.h>
|
using | BytesToSend = std::tuple< Span< const uint8_t >, bool, const std::string & > |
| Return type for GetBytesToSend, consisting of: More...
|
|
Definition at line 360 of file net.h.
◆ V1Transport()
V1Transport::V1Transport |
( |
const NodeId |
node_id, |
|
|
int |
nTypeIn, |
|
|
int |
nVersionIn |
|
) |
| |
|
noexcept |
◆ CompleteInternal()
bool V1Transport::CompleteInternal |
( |
| ) |
const |
|
inlineprivatenoexcept |
◆ GetBytesToSend()
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.
- Parameters
-
[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:
- Yes: the transport itself has more bytes to send later. For example, for V1Transport this happens during the sending of the header of a message, when there is a non-empty payload that follows.
- No: the transport itself has no more bytes to send, but will have bytes to send if handed a message through SetMessageToSend. In V1Transport this happens when sending the payload of a message.
- Blocked: the transport itself has no more bytes to send, and is also incapable of sending anything more at all now, if it were handed another message to send. This occurs in V2Transport before the handshake is complete, as the encryption ciphers are not set up for sending messages before that point.
The boolean 'more' is true for Yes, false for Blocked, and have_next_message controls what is returned for No.
- Returns
- a BytesToSend object. The to_send member returned acts as a stream which is only ever appended to. This means that with the exception of MarkBytesSent (which pops bytes off the front of later to_sends), operations on the transport can only append to what is being returned. Also note that m_type and to_send refer to data that is internal to the transport, and calling any non-const function on this object may invalidate them.
Implements Transport.
Definition at line 867 of file net.cpp.
◆ GetMessageHash()
const uint256 & V1Transport::GetMessageHash |
( |
| ) |
const |
|
private |
◆ GetReceivedMessage()
CNetMessage V1Transport::GetReceivedMessage |
( |
std::chrono::microseconds |
time, |
|
|
bool & |
reject_message |
|
) |
| |
|
overridevirtual |
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.
Implements Transport.
Definition at line 803 of file net.cpp.
◆ GetSendMemoryUsage()
size_t V1Transport::GetSendMemoryUsage |
( |
| ) |
const |
|
overridevirtualnoexcept |
Return the memory usage of this transport attributable to buffered data to send.
Implements Transport.
Definition at line 904 of file net.cpp.
◆ GUARDED_BY() [1/12]
◆ GUARDED_BY() [2/12]
◆ GUARDED_BY() [3/12]
◆ GUARDED_BY() [4/12]
◆ GUARDED_BY() [5/12]
◆ GUARDED_BY() [6/12]
◆ GUARDED_BY() [7/12]
unsigned int nHdrPos V1Transport::GUARDED_BY |
( |
m_recv_mutex |
| ) |
|
|
private |
◆ GUARDED_BY() [8/12]
unsigned int nDataPos V1Transport::GUARDED_BY |
( |
m_recv_mutex |
| ) |
|
|
private |
◆ GUARDED_BY() [9/12]
std::vector<uint8_t> m_header_to_send V1Transport::GUARDED_BY |
( |
m_send_mutex |
| ) |
|
|
private |
The header of the message currently being sent.
◆ GUARDED_BY() [10/12]
The data of the message currently being sent.
◆ GUARDED_BY() [11/12]
bool m_sending_header V1Transport::GUARDED_BY |
( |
m_send_mutex |
| ) |
|
|
inlineprivate |
Whether we're currently sending header bytes or message bytes.
Definition at line 405 of file net.h.
◆ GUARDED_BY() [12/12]
size_t m_bytes_sent V1Transport::GUARDED_BY |
( |
m_send_mutex |
| ) |
|
|
inlineprivate |
How many bytes have been sent so far (from m_header_to_send, or from m_message_to_send.data).
Definition at line 407 of file net.h.
◆ MarkBytesSent()
void V1Transport::MarkBytesSent |
( |
size_t |
bytes_sent | ) |
|
|
overridevirtualnoexcept |
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.
Implements Transport.
Definition at line 888 of file net.cpp.
◆ readData()
int V1Transport::readData |
( |
Span< const uint8_t > |
msg_bytes | ) |
|
|
private |
◆ readHeader()
int V1Transport::readHeader |
( |
Span< const uint8_t > |
msg_bytes | ) |
|
|
private |
◆ ReceivedBytes()
bool V1Transport::ReceivedBytes |
( |
Span< const uint8_t > & |
msg_bytes | ) |
|
|
inlineoverridevirtual |
Feed wire bytes to the transport.
- Returns
- false if some bytes were invalid, in which case the transport can't be used anymore.
Consumed bytes are chopped off the front of msg_bytes.
Implements Transport.
Definition at line 418 of file net.h.
◆ ReceivedMessageComplete()
bool V1Transport::ReceivedMessageComplete |
( |
| ) |
const |
|
inlineoverridevirtual |
Returns true if the current message is complete (so GetReceivedMessage can be called).
Implements Transport.
Definition at line 412 of file net.h.
◆ Reset()
void V1Transport::Reset |
( |
| ) |
|
|
inlineprivate |
◆ SetMessageToSend()
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.
Implements Transport.
Definition at line 842 of file net.cpp.
◆ m_magic_bytes
◆ m_node_id
const NodeId V1Transport::m_node_id |
|
private |
◆ m_recv_mutex
Mutex V1Transport::m_recv_mutex |
|
mutableprivate |
Lock for receive state.
Definition at line 365 of file net.h.
◆ m_send_mutex
Mutex V1Transport::m_send_mutex |
|
mutableprivate |
Lock for sending state.
Definition at line 399 of file net.h.
The documentation for this class was generated from the following files: