MayaFlux 1.0.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 483 of file TCPBackend.cpp.

485{
486 if (ec) {
487 on_connection_error(conn, ec);
488 return;
489 }
490
491 uint32_t net_len {};
492 std::memcpy(&net_len, conn.header_buf.data(), sizeof(uint32_t));
493 uint32_t payload_size = ntohl(net_len);
494
495 if (payload_size == 0 || payload_size > 64 * 1024 * 1024) {
497 "TCP endpoint {} received invalid frame length: {}",
498 conn.info.id, payload_size);
499 on_connection_error(conn, asio::error::message_size);
500 return;
501 }
502
503 conn.payload_buf.resize(payload_size);
504
505 asio::async_read(
506 conn.socket,
507 asio::buffer(conn.payload_buf),
508 [this, ep_id = conn.info.id](const asio::error_code& read_ec, size_t bytes) {
509 std::shared_lock lock(m_connections_mutex);
510 auto it = m_connections.find(ep_id);
511 if (it == m_connections.end()) {
512 return;
513 }
514 on_payload_received(*it->second, read_ec, bytes);
515 });
516}
#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.