ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
esphome::web_server_idf::AsyncEventSourceResponse Class Reference

#include <web_server_idf.h>

Data Structures

struct  SendGuard
 

Public Member Functions

bool try_send_nodefer (const char *message, size_t message_len, const char *event=nullptr, uint32_t id=0, uint32_t reconnect=0)
 
void deferrable_send_state (void *source, bool detail_all, message_generator_t *message_generator)
 
void deferrable_send_state (void *source, const char *event_type, message_generator_t *message_generator)=delete
 
void loop ()
 

Protected Types

enum class  JsonPrepareResult : uint8_t { JSON_PREPARE_RESULT_BUFFER , JSON_PREPARE_RESULT_TAIL , JSON_PREPARE_RESULT_NO_MEMORY , JSON_PREPARE_RESULT_TOO_LARGE }
 

Protected Member Functions

 AsyncEventSourceResponse (const AsyncWebServerRequest *request, esphome::web_server_idf::AsyncEventSource *server, esphome::web_server::WebServer *ws)
 
void start_session_main_loop_ ()
 
void deq_push_back_with_dedup_ (void *source, message_generator_t *message_generator)
 
void process_deferred_queue_ ()
 
bool ready_to_send_ ()
 
ssize_t send_ (struct iovec *iov, int iovcnt)
 
void drain_tail_ ()
 
bool reserve_tail_ (size_t len)
 
bool stash_chunk_ (const char *prefix, size_t prefix_len, const char *message, size_t message_len, size_t total, size_t sent)
 
bool send_json_ (void *source, message_generator_t *generator)
 
JsonPrepareResult __attribute__ ((noinline)) prepare_json_(void *source
 
void tail_alloc_failed_ (size_t cap)
 
void request_close_ ()
 
void process_close_ ()
 
void refresh_lru_ ()
 
bool owns_session_ (int fd) const
 
bool safe_to_delete_ () const
 

Static Protected Member Functions

static void close_session_work (void *arg)
 
static void refresh_lru_work (void *arg)
 
static void destroy (void *p)
 

Protected Attributes

JsonPrepareResult message_generator_t * generator
 
JsonPrepareResult message_generator_t char * buffer
 
JsonPrepareResult message_generator_t char size_t * size_out
 
AsyncEventSource * server_
 
httpd_handle_t hd_ {}
 
std::atomic< int > fd_ {}
 
std::vector< DeferredEvent > deferred_queue_
 
esphome::web_server::WebServer * web_server_
 
esphome::web_server::ListEntitiesIterator entities_iterator_
 
RAMUniquePtr< uint8_t[]> tail_
 
uint32_t send_failure_started_ms_ {0}
 
uint32_t next_close_attempt_ms_ {0}
 
uint32_t last_lru_refresh_ms_ {0}
 
uint16_t tail_cap_ {0}
 
uint16_t tail_len_ {0}
 
uint16_t tail_sent_ {0}
 
std::atomic< bool > close_work_queued_ {false}
 
std::atomic< bool > lru_work_queued_ {false}
 
bool close_requested_ {false}
 
bool close_retry_warning_logged_ {false}
 
bool sending_ {false}
 

Static Protected Attributes

static constexpr size_t MAX_SEND_LINES = 22
 
static constexpr size_t MAX_SEND_IOV = 1 + 2 * MAX_SEND_LINES
 
static constexpr size_t PREFIX_BUF_SIZE = 128
 
static constexpr size_t JSON_BUF_SIZE = 1024
 
static constexpr size_t JSON_MAX_SIZE = 5120
 
static constexpr size_t TAIL_MAX_SIZE = JSON_MAX_SIZE + PREFIX_BUF_SIZE + SSE_SUFFIX_LEN
 
static constexpr uint32_t SEND_STALL_TIMEOUT_MS = 20000
 
static constexpr uint32_t CLOSE_RETRY_INTERVAL_MS = 250
 
static constexpr uint32_t CLOSE_CONFIRM_INTERVAL_MS = 1000
 
static constexpr uint32_t LRU_REFRESH_INTERVAL_MS = 1000
 

Detailed Description

Definition at line 298 of file web_server_idf.h.

Member Enumeration Documentation

◆ JsonPrepareResult

Enumerator
JSON_PREPARE_RESULT_BUFFER 
JSON_PREPARE_RESULT_TAIL 
JSON_PREPARE_RESULT_NO_MEMORY 
JSON_PREPARE_RESULT_TOO_LARGE 

Definition at line 333 of file web_server_idf.h.

Constructor & Destructor Documentation

◆ AsyncEventSourceResponse()

esphome::web_server_idf::AsyncEventSourceResponse::AsyncEventSourceResponse ( const AsyncWebServerRequest * request,
esphome::web_server_idf::AsyncEventSource * server,
esphome::web_server::WebServer * ws )
protected

Definition at line 810 of file web_server_idf.cpp.

Member Function Documentation

◆ __attribute__()

JsonPrepareResult esphome::web_server_idf::AsyncEventSourceResponse::__attribute__ ( (noinline) )
protected

◆ close_session_work()

void esphome::web_server_idf::AsyncEventSourceResponse::close_session_work ( void * arg)
staticprotected

Definition at line 989 of file web_server_idf.cpp.

◆ deferrable_send_state() [1/2]

void esphome::web_server_idf::AsyncEventSourceResponse::deferrable_send_state ( void * source,
bool detail_all,
message_generator_t * message_generator )

Definition at line 1289 of file web_server_idf.cpp.

◆ deferrable_send_state() [2/2]

void esphome::web_server_idf::AsyncEventSourceResponse::deferrable_send_state ( void * source,
const char * event_type,
message_generator_t * message_generator )
delete

◆ deq_push_back_with_dedup_()

void esphome::web_server_idf::AsyncEventSourceResponse::deq_push_back_with_dedup_ ( void * source,
message_generator_t * message_generator )
protected

Definition at line 885 of file web_server_idf.cpp.

◆ destroy()

void esphome::web_server_idf::AsyncEventSourceResponse::destroy ( void * p)
staticprotected

Definition at line 874 of file web_server_idf.cpp.

◆ drain_tail_()

void esphome::web_server_idf::AsyncEventSourceResponse::drain_tail_ ( )
protected

Definition at line 1025 of file web_server_idf.cpp.

◆ loop()

void esphome::web_server_idf::AsyncEventSourceResponse::loop ( )

Definition at line 1110 of file web_server_idf.cpp.

◆ owns_session_()

bool esphome::web_server_idf::AsyncEventSourceResponse::owns_session_ ( int fd) const
inlineprotected

Definition at line 359 of file web_server_idf.h.

◆ process_close_()

void esphome::web_server_idf::AsyncEventSourceResponse::process_close_ ( )
protected

Definition at line 929 of file web_server_idf.cpp.

◆ process_deferred_queue_()

void esphome::web_server_idf::AsyncEventSourceResponse::process_deferred_queue_ ( )
protected

Definition at line 897 of file web_server_idf.cpp.

◆ ready_to_send_()

bool esphome::web_server_idf::AsyncEventSourceResponse::ready_to_send_ ( )
protected

Definition at line 1222 of file web_server_idf.cpp.

◆ refresh_lru_()

void esphome::web_server_idf::AsyncEventSourceResponse::refresh_lru_ ( )
protected

Definition at line 960 of file web_server_idf.cpp.

◆ refresh_lru_work()

void esphome::web_server_idf::AsyncEventSourceResponse::refresh_lru_work ( void * arg)
staticprotected

Definition at line 979 of file web_server_idf.cpp.

◆ request_close_()

void esphome::web_server_idf::AsyncEventSourceResponse::request_close_ ( )
protected

Definition at line 915 of file web_server_idf.cpp.

◆ reserve_tail_()

bool esphome::web_server_idf::AsyncEventSourceResponse::reserve_tail_ ( size_t len)
protected

Definition at line 1063 of file web_server_idf.cpp.

◆ safe_to_delete_()

bool esphome::web_server_idf::AsyncEventSourceResponse::safe_to_delete_ ( ) const
inlineprotected

Definition at line 362 of file web_server_idf.h.

◆ send_()

ssize_t esphome::web_server_idf::AsyncEventSourceResponse::send_ ( struct iovec * iov,
int iovcnt )
protected

Definition at line 1002 of file web_server_idf.cpp.

◆ send_json_()

bool esphome::web_server_idf::AsyncEventSourceResponse::send_json_ ( void * source,
message_generator_t * generator )
protected

Definition at line 1178 of file web_server_idf.cpp.

◆ start_session_main_loop_()

void esphome::web_server_idf::AsyncEventSourceResponse::start_session_main_loop_ ( )
protected

Definition at line 839 of file web_server_idf.cpp.

◆ stash_chunk_()

bool esphome::web_server_idf::AsyncEventSourceResponse::stash_chunk_ ( const char * prefix,
size_t prefix_len,
const char * message,
size_t message_len,
size_t total,
size_t sent )
protected

Definition at line 1078 of file web_server_idf.cpp.

◆ tail_alloc_failed_()

void esphome::web_server_idf::AsyncEventSourceResponse::tail_alloc_failed_ ( size_t cap)
protected

Definition at line 1208 of file web_server_idf.cpp.

◆ try_send_nodefer()

bool esphome::web_server_idf::AsyncEventSourceResponse::try_send_nodefer ( const char * message,
size_t message_len,
const char * event = nullptr,
uint32_t id = 0,
uint32_t reconnect = 0 )

Definition at line 1230 of file web_server_idf.cpp.

Field Documentation

◆ buffer

JsonPrepareResult message_generator_t char* esphome::web_server_idf::AsyncEventSourceResponse::buffer
protected

Definition at line 342 of file web_server_idf.h.

◆ CLOSE_CONFIRM_INTERVAL_MS

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::CLOSE_CONFIRM_INTERVAL_MS = 1000
staticconstexprprotected

Definition at line 406 of file web_server_idf.h.

◆ close_requested_

bool esphome::web_server_idf::AsyncEventSourceResponse::close_requested_ {false}
protected

Definition at line 387 of file web_server_idf.h.

◆ CLOSE_RETRY_INTERVAL_MS

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::CLOSE_RETRY_INTERVAL_MS = 250
staticconstexprprotected

Definition at line 405 of file web_server_idf.h.

◆ close_retry_warning_logged_

bool esphome::web_server_idf::AsyncEventSourceResponse::close_retry_warning_logged_ {false}
protected

Definition at line 388 of file web_server_idf.h.

◆ close_work_queued_

std::atomic<bool> esphome::web_server_idf::AsyncEventSourceResponse::close_work_queued_ {false}
protected

Definition at line 384 of file web_server_idf.h.

◆ deferred_queue_

std::vector<DeferredEvent> esphome::web_server_idf::AsyncEventSourceResponse::deferred_queue_
protected

Definition at line 371 of file web_server_idf.h.

◆ entities_iterator_

esphome::web_server::ListEntitiesIterator esphome::web_server_idf::AsyncEventSourceResponse::entities_iterator_
protected

Definition at line 373 of file web_server_idf.h.

◆ fd_

std::atomic<int> esphome::web_server_idf::AsyncEventSourceResponse::fd_ {}
protected

Definition at line 370 of file web_server_idf.h.

◆ generator

JsonPrepareResult message_generator_t* esphome::web_server_idf::AsyncEventSourceResponse::generator
protected

Definition at line 342 of file web_server_idf.h.

◆ hd_

httpd_handle_t esphome::web_server_idf::AsyncEventSourceResponse::hd_ {}
protected

Definition at line 369 of file web_server_idf.h.

◆ JSON_BUF_SIZE

size_t esphome::web_server_idf::AsyncEventSourceResponse::JSON_BUF_SIZE = 1024
staticconstexprprotected

Definition at line 398 of file web_server_idf.h.

◆ JSON_MAX_SIZE

size_t esphome::web_server_idf::AsyncEventSourceResponse::JSON_MAX_SIZE = 5120
staticconstexprprotected

Definition at line 401 of file web_server_idf.h.

◆ last_lru_refresh_ms_

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::last_lru_refresh_ms_ {0}
protected

Definition at line 379 of file web_server_idf.h.

◆ LRU_REFRESH_INTERVAL_MS

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::LRU_REFRESH_INTERVAL_MS = 1000
staticconstexprprotected

Definition at line 407 of file web_server_idf.h.

◆ lru_work_queued_

std::atomic<bool> esphome::web_server_idf::AsyncEventSourceResponse::lru_work_queued_ {false}
protected

Definition at line 385 of file web_server_idf.h.

◆ MAX_SEND_IOV

size_t esphome::web_server_idf::AsyncEventSourceResponse::MAX_SEND_IOV = 1 + 2 * MAX_SEND_LINES
staticconstexprprotected

Definition at line 393 of file web_server_idf.h.

◆ MAX_SEND_LINES

size_t esphome::web_server_idf::AsyncEventSourceResponse::MAX_SEND_LINES = 22
staticconstexprprotected

Definition at line 392 of file web_server_idf.h.

◆ next_close_attempt_ms_

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::next_close_attempt_ms_ {0}
protected

Definition at line 378 of file web_server_idf.h.

◆ PREFIX_BUF_SIZE

size_t esphome::web_server_idf::AsyncEventSourceResponse::PREFIX_BUF_SIZE = 128
staticconstexprprotected

Definition at line 395 of file web_server_idf.h.

◆ send_failure_started_ms_

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::send_failure_started_ms_ {0}
protected

Definition at line 377 of file web_server_idf.h.

◆ SEND_STALL_TIMEOUT_MS

uint32_t esphome::web_server_idf::AsyncEventSourceResponse::SEND_STALL_TIMEOUT_MS = 20000
staticconstexprprotected

Definition at line 404 of file web_server_idf.h.

◆ sending_

bool esphome::web_server_idf::AsyncEventSourceResponse::sending_ {false}
protected

Definition at line 389 of file web_server_idf.h.

◆ server_

AsyncEventSource* esphome::web_server_idf::AsyncEventSourceResponse::server_
protected

Definition at line 368 of file web_server_idf.h.

◆ size_out

JsonPrepareResult message_generator_t char size_t* esphome::web_server_idf::AsyncEventSourceResponse::size_out
protected

Definition at line 343 of file web_server_idf.h.

◆ tail_

RAMUniquePtr<uint8_t[]> esphome::web_server_idf::AsyncEventSourceResponse::tail_
protected

Definition at line 376 of file web_server_idf.h.

◆ tail_cap_

uint16_t esphome::web_server_idf::AsyncEventSourceResponse::tail_cap_ {0}
protected

Definition at line 380 of file web_server_idf.h.

◆ tail_len_

uint16_t esphome::web_server_idf::AsyncEventSourceResponse::tail_len_ {0}
protected

Definition at line 381 of file web_server_idf.h.

◆ TAIL_MAX_SIZE

size_t esphome::web_server_idf::AsyncEventSourceResponse::TAIL_MAX_SIZE = JSON_MAX_SIZE + PREFIX_BUF_SIZE + SSE_SUFFIX_LEN
staticconstexprprotected

Definition at line 403 of file web_server_idf.h.

◆ tail_sent_

uint16_t esphome::web_server_idf::AsyncEventSourceResponse::tail_sent_ {0}
protected

Definition at line 382 of file web_server_idf.h.

◆ web_server_

esphome::web_server::WebServer* esphome::web_server_idf::AsyncEventSourceResponse::web_server_
protected

Definition at line 372 of file web_server_idf.h.


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