userver: engine::io::PrefixedRw Class Reference
Loading...
Searching...
No Matches
engine::io::PrefixedRw Class Referencefinal

#include <userver/engine/io/prefixed_rw.hpp>

Detailed Description

RwBase adapter that returns a fixed byte prefix before reading from the underlying stream.

Useful when some already-received bytes must be replayed as if they were still unread on the socket (for example, handshake leftovers buffered by a third-party library).

Writes always go to the underlying stream. The readable awaitable reports ready while unread prefix bytes remain (so engine::WaitAny wakes even if the underlying socket has no data yet); afterwards it follows the underlying stream.

auto underlying = std::make_unique<MemoryRwBase>("world");
engine::io::PrefixedRw stream("hello-", std::move(underlying));
std::array<char, 32> buf{};
ASSERT_EQ(11, stream.ReadAll(buf.data(), 11, {}));
EXPECT_EQ(std::string_view(buf.data(), 11), "hello-world");

Definition at line 32 of file prefixed_rw.hpp.

Inheritance diagram for engine::io::PrefixedRw:

Public Member Functions

 PrefixedRw (std::string prefix, std::unique_ptr< RwBase > underlying)
 PrefixedRw (const PrefixedRw &)=delete
PrefixedRwoperator= (const PrefixedRw &)=delete
 PrefixedRw (PrefixedRw &&) noexcept=delete
PrefixedRwoperator= (PrefixedRw &&) noexcept=delete
bool IsValid () const override
 Whether the underlying stream is valid.
bool WaitReadable (Deadline deadline) override
bool WaitWriteable (Deadline deadline) override
 Waits on the underlying stream.
std::optional< size_t > ReadNoblock (void *buf, size_t len) override
 Reads from the prefix first, then from the underlying stream.
size_t ReadSome (void *buf, size_t len, Deadline deadline) override
 Reads from the prefix first, then from the underlying stream.
size_t ReadAll (void *buf, size_t len, Deadline deadline) override
 Reads from the prefix first, then from the underlying stream.
size_t WriteAll (const void *buf, size_t len, Deadline deadline) override
 Forwards to the underlying stream.
size_t WriteAll (std::span< const IoData > list, Deadline deadline) override
 Forwards to the underlying stream.
ReadableBaseGetReadableBase ()
WritableBaseGetWritableBase ()
AwaitableToken GetAwaitableToken ()
 Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.
AwaitableToken GetAwaitableToken ()
 Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.
virtual size_t WriteAll (std::initializer_list< IoData > list, Deadline deadline)
 Sends IoData initializer list using vector I/O (e.g. writev).

Protected Member Functions

void SetReadableAwaitableToken (AwaitableToken token)
void SetWritableAwaitableToken (AwaitableToken token)

Constructor & Destructor Documentation

◆ PrefixedRw()

engine::io::PrefixedRw::PrefixedRw ( std::string prefix,
std::unique_ptr< RwBase > underlying )
Parameters
prefixBytes returned by read APIs before touching underlying.
underlyingStream used after prefix is exhausted; must be non-null.

Member Function Documentation

◆ GetAwaitableToken() [1/2]

AwaitableToken engine::io::ReadAwaiter::GetAwaitableToken ( )
inlineinherited

Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.

Definition at line 39 of file common.hpp.

◆ GetAwaitableToken() [2/2]

AwaitableToken engine::io::WriteAwaiter::GetAwaitableToken ( )
inlineinherited

Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.

Definition at line 91 of file common.hpp.

◆ GetReadableBase()

ReadableBase & engine::io::RwBase::GetReadableBase ( )
inlineinherited

Definition at line 146 of file common.hpp.

◆ GetWritableBase()

WritableBase & engine::io::RwBase::GetWritableBase ( )
inlineinherited

Definition at line 148 of file common.hpp.

◆ IsValid()

bool engine::io::PrefixedRw::IsValid ( ) const
overridevirtual

Whether the underlying stream is valid.

Implements engine::io::ReadableBase.

◆ ReadAll()

size_t engine::io::PrefixedRw::ReadAll ( void * buf,
size_t len,
Deadline deadline )
nodiscardoverridevirtual

Reads from the prefix first, then from the underlying stream.

Implements engine::io::ReadableBase.

◆ ReadNoblock()

std::optional< size_t > engine::io::PrefixedRw::ReadNoblock ( void * buf,
size_t len )
nodiscardoverridevirtual

Reads from the prefix first, then from the underlying stream.

Reimplemented from engine::io::ReadableBase.

◆ ReadSome()

size_t engine::io::PrefixedRw::ReadSome ( void * buf,
size_t len,
Deadline deadline )
nodiscardoverridevirtual

Reads from the prefix first, then from the underlying stream.

Implements engine::io::ReadableBase.

◆ SetReadableAwaitableToken()

void engine::io::ReadAwaiter::SetReadableAwaitableToken ( AwaitableToken token)
inlineprotectedinherited

Definition at line 44 of file common.hpp.

◆ SetWritableAwaitableToken()

void engine::io::WriteAwaiter::SetWritableAwaitableToken ( AwaitableToken token)
inlineprotectedinherited

Definition at line 96 of file common.hpp.

◆ WaitReadable()

bool engine::io::PrefixedRw::WaitReadable ( Deadline deadline)
nodiscardoverridevirtual
Returns
true immediately while unread prefix bytes remain; otherwise waits on the underlying stream.

Implements engine::io::ReadAwaiter.

◆ WaitWriteable()

bool engine::io::PrefixedRw::WaitWriteable ( Deadline deadline)
nodiscardoverridevirtual

Waits on the underlying stream.

Implements engine::io::WriteAwaiter.

◆ WriteAll() [1/3]

size_t engine::io::PrefixedRw::WriteAll ( const void * buf,
size_t len,
Deadline deadline )
nodiscardoverridevirtual

Forwards to the underlying stream.

Implements engine::io::WritableBase.

◆ WriteAll() [2/3]

size_t engine::io::PrefixedRw::WriteAll ( std::span< const IoData > list,
Deadline deadline )
nodiscardoverridevirtual

Forwards to the underlying stream.

Reimplemented from engine::io::WritableBase.

◆ WriteAll() [3/3]

virtual size_t engine::io::WritableBase::WriteAll ( std::initializer_list< IoData > list,
Deadline deadline )
inlinenodiscardvirtualinherited

Sends IoData initializer list using vector I/O (e.g. writev).

Note
Can return less than total bytes if stream is closed by peer.

Reimplemented in engine::io::TlsWrapper.

Definition at line 133 of file common.hpp.


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