MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ on_header_received()

void MayaFlux::Core::TCPBackend::on_header_received ( ConnectionState conn,
const asio::error_code &  ec,
size_t  bytes 
)
private

Header read completion handler.

Definition at line 479 of file TCPBackend.cpp.

481{
482 if (ec) {
483 on_connection_error(conn, ec);
484 return;
485 }
486
487 uint32_t net_len {};
488 std::memcpy(&net_len, conn.header_buf.data(), sizeof(uint32_t));
489 uint32_t payload_size = ntohl(net_len);
490
491 if (payload_size == 0 || payload_size > 64 * 1024 * 1024) {
493 "TCP endpoint {} received invalid frame length: {}",
494 conn.info.id, payload_size);
495 on_connection_error(conn, asio::error::message_size);
496 return;
497 }
498
499 conn.payload_buf.resize(payload_size);
500
501 asio::async_read(
502 conn.socket,
503 asio::buffer(conn.payload_buf),
504 [this, ep_id = conn.info.id](const asio::error_code& read_ec, size_t bytes) {
505 std::shared_lock lock(m_connections_mutex);
506 auto it = m_connections.find(ep_id);
507 if (it == m_connections.end()) {
508 return;
509 }
510 on_payload_received(*it->second, read_ec, bytes);
511 });
512}
#define MF_WARN(comp, ctx,...)
void on_payload_received(ConnectionState &conn, const asio::error_code &ec, size_t bytes)
Payload read completion handler.
void on_connection_error(ConnectionState &conn, const asio::error_code &ec)
Handle a connection error (read/write failure).
@ NetworkBackend
Network transport backend (UDP, TCP, SHM)
@ Core
Core engine, backend, subsystems.

References MayaFlux::Journal::Core, MayaFlux::Core::TCPBackend::ConnectionState::header_buf, MayaFlux::Core::EndpointInfo::id, MayaFlux::Core::TCPBackend::ConnectionState::info, MF_WARN, MayaFlux::Journal::NetworkBackend, MayaFlux::Core::TCPBackend::ConnectionState::payload_buf, and MayaFlux::Core::TCPBackend::ConnectionState::socket.