A11 (C++ runtime)
Native C++ implementation of the A11 action and streaming runtime
Loading...
Searching...
No Matches
a11::net::HttpSseWireStream Class Referenceabstract

Common base for the client and server HTTP SSE wire streams. More...

#include <cpp/a11/net/http_sse_wire_stream.h>

Inheritance diagram for a11::net::HttpSseWireStream:
[legend]

Classes

struct  State
 

Public Member Functions

 ~HttpSseWireStream () override=default
 
absl::Status Send (data::WireMessage message) override
 Enqueue a message for delivery to the peer.
 
a11::Task Start (OnMessage on_message, OnDone on_done) override
 Begin the stream as the initiating ("start") side.
 
a11::Task Accept (OnMessage on_message, OnDone on_done) override
 Begin the stream as the accepting ("accept") side.
 
absl::Status HalfClose (data::ByteMap trailers) override
 Signal that this side will send no more messages.
 
a11::Task DrainOutgoingMessages () override
 Await delivery of all buffered outbound messages.
 
absl::Status Abort (absl::Status status) override
 Abort the stream, discarding buffered work.
 
absl::Status SetDeadline (absl::Time deadline) override
 Set the absolute deadline after which the stream is aborted.
 
absl::Time deadline () const override
 
absl::Status GetStatus () const override
 
std::optional< data::ByteMapGetTrailers () const override
 
std::string GetId () const override
 
void *absl_nullable GetImpl () const override
 
HttpHeaders GetHttpRequestHeaders () const
 
std::optional< HttpHeadersGetHttpResponseHeaders () const
 
absl::Status SetHttpRequestHeaders (HttpHeaders headers)
 Sets HTTP headers to send on the SSE request; call before connecting.
 
absl::Status SetHttpResponseHeaders (HttpHeaders headers)
 Sets HTTP headers to send on the SSE response (server side).
 
a11::Task WaitForHttpHeaders () const
 
absl::Status HalfClose ()
 Half-close with no trailers.
 
virtual absl::Status HalfClose (data::ByteMap trailers)=0
 Signal that this side will send no more messages.
 
absl::Status SetDeadline ()
 Clear any deadline (equivalent to an infinite deadline).
 
virtual absl::Status SetDeadline (absl::Time deadline)=0
 Set the absolute deadline after which the stream is aborted.
 
- Public Member Functions inherited from a11::net::WireStream
virtual ~WireStream ()=default
 
absl::Status HalfClose ()
 Half-close with no trailers.
 
absl::Status SetDeadline ()
 Clear any deadline (equivalent to an infinite deadline).
 

Protected Types

enum class  Role { kClient , kServer }
 

Protected Member Functions

 HttpSseWireStream (Role role, std::string id, HttpSseOptions options, InProcessWireStream::Pair pair, std::shared_ptr< State > state)
 
a11::Task StartEndpoint (bool accept, OnMessage on_message, OnDone on_done)
 
a11::Task StartInternalBridge ()
 
a11::Task HandleBridgeMessage (std::optional< data::WireMessage > message)
 
a11::Task HandleBridgeDone ()
 
a11::Task ReceiveTransportMessage (data::WireMessage message)
 
void FailTransport (absl::Status status)
 
void MarkHttpHeadersReady (HttpHeaders headers)
 
void SetId (std::string id)
 
HttpSseOptions options () const
 
std::shared_ptr< InProcessWireStreambridge () const
 
virtual a11::Task OpenTransport ()=0
 
virtual absl::Status Transmit (data::WireMessage message)=0
 
virtual void *absl_nullable TransportImpl () const =0
 
virtual void TransportDone ()
 

Friends

class HttpSseServer
 

Detailed Description

Common base for the client and server HTTP SSE wire streams.

Implements the WireStream interface on top of an internal in-process bridge, delegating the actual HTTP/2 transport to the concrete subclass. It also exposes the transport-level HTTP request/response headers so agents can attach or inspect auth and routing metadata.

Member Enumeration Documentation

◆ Role

Enumerator
kClient 
kServer 

Constructor & Destructor Documentation

◆ ~HttpSseWireStream()

a11::net::HttpSseWireStream::~HttpSseWireStream ( )
overridedefault

◆ HttpSseWireStream()

a11::net::HttpSseWireStream::HttpSseWireStream ( Role  role,
std::string  id,
HttpSseOptions  options,
InProcessWireStream::Pair  pair,
std::shared_ptr< State state 
)
protected

Member Function Documentation

◆ Abort()

absl::Status a11::net::HttpSseWireStream::Abort ( absl::Status  status)
overridevirtual

Abort the stream, discarding buffered work.

Parameters
statusA non-OK status reported to the peer as the abort reason.
Returns
OK if the abort was accepted.

Implements a11::net::WireStream.

◆ Accept()

a11::Task a11::net::HttpSseWireStream::Accept ( OnMessage  on_message,
OnDone  on_done 
)
overridevirtual

Begin the stream as the accepting ("accept") side.

Parameters
on_messageInvoked for each inbound message (nullopt = peer half-closed).
on_doneInvoked once when the stream has finished.
Returns
An awaitable that resolves once the stream is accepted.

Implements a11::net::WireStream.

◆ bridge()

std::shared_ptr< InProcessWireStream > a11::net::HttpSseWireStream::bridge ( ) const
protected

◆ deadline()

absl::Time a11::net::HttpSseWireStream::deadline ( ) const
overridevirtual
Returns
The stream's current deadline.

Implements a11::net::WireStream.

◆ DrainOutgoingMessages()

a11::Task a11::net::HttpSseWireStream::DrainOutgoingMessages ( )
overridevirtual

Await delivery of all buffered outbound messages.

Returns
An awaitable that resolves once this endpoint's queued messages have been flushed to the transport (requires a prior HalfClose).

Implements a11::net::WireStream.

◆ FailTransport()

void a11::net::HttpSseWireStream::FailTransport ( absl::Status  status)
protected

◆ GetHttpRequestHeaders()

HttpHeaders a11::net::HttpSseWireStream::GetHttpRequestHeaders ( ) const
Returns
The HTTP headers carried on the underlying SSE request.

◆ GetHttpResponseHeaders()

std::optional< HttpHeaders > a11::net::HttpSseWireStream::GetHttpResponseHeaders ( ) const
Returns
The negotiated SSE response headers, or nullopt if not yet arrived. Prefer awaiting WaitForHttpHeaders() first.

◆ GetId()

std::string a11::net::HttpSseWireStream::GetId ( ) const
overridevirtual
Returns
This stream's transport-assigned identifier.

Implements a11::net::WireStream.

◆ GetImpl()

void *absl_nullable a11::net::HttpSseWireStream::GetImpl ( ) const
overridevirtual
Returns
An opaque handle to the underlying transport object (advanced; may be null).

Implements a11::net::WireStream.

◆ GetStatus()

absl::Status a11::net::HttpSseWireStream::GetStatus ( ) const
overridevirtual
Returns
The stream's terminal status (OK unless it failed or was aborted).

Implements a11::net::WireStream.

◆ GetTrailers()

std::optional< data::ByteMap > a11::net::HttpSseWireStream::GetTrailers ( ) const
overridevirtual
Returns
The peer's closing trailers, if the stream has received them.

Implements a11::net::WireStream.

◆ HalfClose() [1/3]

absl::Status a11::net::WireStream::HalfClose ( )
inline

Half-close with no trailers.

See also
HalfClose(data::ByteMap)

◆ HalfClose() [2/3]

absl::Status a11::net::HttpSseWireStream::HalfClose ( data::ByteMap  trailers)
overridevirtual

Signal that this side will send no more messages.

The terminal marker is queued after buffered outbound messages and, once the peer also half-closes, the stream completes. Inbound messages continue to be delivered until then. Call DrainOutgoingMessages() to await local transport delivery.

Parameters
trailersOptional closing metadata delivered to the peer.
Returns
OK, or a non-OK status if the stream cannot be half-closed.

Implements a11::net::WireStream.

◆ HalfClose() [3/3]

virtual absl::Status a11::net::WireStream::HalfClose ( data::ByteMap  trailers)
virtual

Signal that this side will send no more messages.

The terminal marker is queued after buffered outbound messages and, once the peer also half-closes, the stream completes. Inbound messages continue to be delivered until then. Call DrainOutgoingMessages() to await local transport delivery.

Parameters
trailersOptional closing metadata delivered to the peer.
Returns
OK, or a non-OK status if the stream cannot be half-closed.

Implements a11::net::WireStream.

◆ HandleBridgeDone()

a11::Task a11::net::HttpSseWireStream::HandleBridgeDone ( )
protected

◆ HandleBridgeMessage()

a11::Task a11::net::HttpSseWireStream::HandleBridgeMessage ( std::optional< data::WireMessage message)
protected

◆ MarkHttpHeadersReady()

void a11::net::HttpSseWireStream::MarkHttpHeadersReady ( HttpHeaders  headers)
protected

◆ OpenTransport()

virtual a11::Task a11::net::HttpSseWireStream::OpenTransport ( )
protectedpure virtual

◆ options()

HttpSseOptions a11::net::HttpSseWireStream::options ( ) const
protected

◆ ReceiveTransportMessage()

a11::Task a11::net::HttpSseWireStream::ReceiveTransportMessage ( data::WireMessage  message)
protected

◆ Send()

absl::Status a11::net::HttpSseWireStream::Send ( data::WireMessage  message)
overridevirtual

Enqueue a message for delivery to the peer.

Non-blocking.

The message is admitted to this endpoint's outbound queue and delivered asynchronously by the transport task, which is also where backpressure is applied; there is no delivery-order guarantee across messages (see the class comment).

Parameters
messageThe message to send.
Returns
OK once the message is queued, or a non-OK status if the stream is not writable (e.g. already half-closed or aborted).

Implements a11::net::WireStream.

◆ SetDeadline() [1/3]

absl::Status a11::net::WireStream::SetDeadline ( )
inline

Clear any deadline (equivalent to an infinite deadline).

◆ SetDeadline() [2/3]

absl::Status a11::net::HttpSseWireStream::SetDeadline ( absl::Time  deadline)
overridevirtual

Set the absolute deadline after which the stream is aborted.

Parameters
deadlineThe deadline; absl::InfiniteFuture() disables it.

Implements a11::net::WireStream.

◆ SetDeadline() [3/3]

virtual absl::Status a11::net::WireStream::SetDeadline ( absl::Time  deadline)
virtual

Set the absolute deadline after which the stream is aborted.

Parameters
deadlineThe deadline; absl::InfiniteFuture() disables it.

Implements a11::net::WireStream.

◆ SetHttpRequestHeaders()

absl::Status a11::net::HttpSseWireStream::SetHttpRequestHeaders ( HttpHeaders  headers)

Sets HTTP headers to send on the SSE request; call before connecting.

◆ SetHttpResponseHeaders()

absl::Status a11::net::HttpSseWireStream::SetHttpResponseHeaders ( HttpHeaders  headers)

Sets HTTP headers to send on the SSE response (server side).

◆ SetId()

void a11::net::HttpSseWireStream::SetId ( std::string  id)
protected

◆ Start()

a11::Task a11::net::HttpSseWireStream::Start ( OnMessage  on_message,
OnDone  on_done 
)
overridevirtual

Begin the stream as the initiating ("start") side.

Parameters
on_messageInvoked for each inbound message (nullopt = peer half-closed).
on_doneInvoked once when the stream has finished.
Returns
An awaitable that resolves once the startup handshake completes.

Implements a11::net::WireStream.

◆ StartEndpoint()

a11::Task a11::net::HttpSseWireStream::StartEndpoint ( bool  accept,
OnMessage  on_message,
OnDone  on_done 
)
protected

◆ StartInternalBridge()

a11::Task a11::net::HttpSseWireStream::StartInternalBridge ( )
protected

◆ Transmit()

virtual absl::Status a11::net::HttpSseWireStream::Transmit ( data::WireMessage  message)
protectedpure virtual

◆ TransportDone()

virtual void a11::net::HttpSseWireStream::TransportDone ( )
inlineprotectedvirtual

◆ TransportImpl()

virtual void *absl_nullable a11::net::HttpSseWireStream::TransportImpl ( ) const
protectedpure virtual

◆ WaitForHttpHeaders()

a11::Task a11::net::HttpSseWireStream::WaitForHttpHeaders ( ) const
Returns
An awaitable that resolves once HTTP headers have been exchanged.

Friends And Related Symbol Documentation

◆ HttpSseServer


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