ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
handlers.c File Reference

ACIP protocol packet handlers implementation. More...

Go to the source code of this file.

Data Structures

struct  handler_hash_entry_t
 Hash table entry for packet type to handler mapping. More...

Macros

#define NETWORK_ACIP_HANDLERS_MSG_BUFFER_SIZE   512
#define NETWORK_ACIP_HANDLERS_HEX_BUFFER_SIZE   512
#define HANDLER_HASH_SIZE   32
#define CLIENT_HANDLER_COUNT   20
#define SERVER_HANDLER_COUNT   21
#define HANDLER_HASH(type)

Typedefs

typedef asciichat_error_t(* acip_client_handler_func_t) (const void *payload, size_t payload_len, const acip_client_callbacks_t *callbacks)
typedef asciichat_error_t(* acip_server_handler_func_t) (const void *payload, size_t payload_len, void *client_ctx, const acip_server_callbacks_t *callbacks)

Functions

asciichat_error_t acip_handle_client_packet (acip_transport_t *transport, packet_type_t type, const void *payload, size_t payload_len, const acip_client_callbacks_t *callbacks)
 Client-side packet handler callbacks.
const char * acip_packet_type_name (uint16_t type)
 Get human-readable name for packet type.
asciichat_error_t acip_handle_server_packet (acip_transport_t *transport, packet_type_t type, const void *payload, size_t payload_len, void *client_ctx, const acip_server_callbacks_t *callbacks)
 Handle incoming packet on server side.

Detailed Description

ACIP protocol packet handlers implementation.

Implements packet dispatching for both client and server sides. Uses O(1) array-based dispatch instead of O(n) switch statements. Parses packet payloads and dispatches to registered callbacks.

Author
Zachary Fogg me@zf.nosp@m.o.gg
Date
January 2026

Definition in file handlers.c.

Macro Definition Documentation

◆ CLIENT_HANDLER_COUNT

#define CLIENT_HANDLER_COUNT   20

Definition at line 47 of file handlers.c.

◆ HANDLER_HASH

#define HANDLER_HASH ( type)
Value:
#define HANDLER_HASH_SIZE
Definition handlers.c:46

Definition at line 60 of file handlers.c.

◆ HANDLER_HASH_SIZE

#define HANDLER_HASH_SIZE   32

Definition at line 46 of file handlers.c.

◆ NETWORK_ACIP_HANDLERS_HEX_BUFFER_SIZE

#define NETWORK_ACIP_HANDLERS_HEX_BUFFER_SIZE   512

Definition at line 15 of file handlers.c.

◆ NETWORK_ACIP_HANDLERS_MSG_BUFFER_SIZE

#define NETWORK_ACIP_HANDLERS_MSG_BUFFER_SIZE   512

Definition at line 14 of file handlers.c.

◆ SERVER_HANDLER_COUNT

#define SERVER_HANDLER_COUNT   21

Definition at line 48 of file handlers.c.

Typedef Documentation

◆ acip_client_handler_func_t

typedef asciichat_error_t(* acip_client_handler_func_t) (const void *payload, size_t payload_len, const acip_client_callbacks_t *callbacks)

Definition at line 34 of file handlers.c.

◆ acip_server_handler_func_t

typedef asciichat_error_t(* acip_server_handler_func_t) (const void *payload, size_t payload_len, void *client_ctx, const acip_server_callbacks_t *callbacks)

Definition at line 37 of file handlers.c.

Function Documentation

◆ acip_handle_client_packet()

asciichat_error_t acip_handle_client_packet ( acip_transport_t * transport,
packet_type_t type,
const void * payload,
size_t payload_len,
const acip_client_callbacks_t * callbacks )

Client-side packet handler callbacks.

Server-side packet handler callbacks

Handle incoming packet on client side

Dispatches packet to appropriate callback based on type. Transport-agnostic - works with TCP, WebSocket, etc.

Parameters
transportTransport instance
typePacket type
payloadPacket payload
payload_lenPayload length
callbacksApplication callbacks
Returns
ASCIICHAT_OK on success, error code on failure

Definition at line 203 of file handlers.c.

204 {
205 stats_runtime_packet(transport ? transport->stats_peer : NULL, type, payload_len, false, true);
206 if (!transport || !callbacks) {
207 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid transport or callbacks");
208 }
209 (void)transport;
210
211 // ACDS broadcasts participant lifecycle notifications to peers. The generic
212 // client callback set does not expose them, so ignore them while keeping the
213 // signaling receive loop alive for subsequent SDP and ICE packets.
215 return ASCIICHAT_OK;
216 }
217
218 // O(1) dispatch via hash table lookup
219 int idx = handler_hash_lookup(g_client_handler_hash, type);
220 if (idx < 0) {
221 return SET_ERRNO(ERROR_INVALID_PARAM, "Unhandled client packet type: %d", type);
222 }
223
224 return g_client_handlers[idx](payload, payload_len, callbacks);
225}
#define SET_ERRNO(code,...)
@ ASCIICHAT_OK
Definition error_codes.h:46
@ ERROR_INVALID_PARAM
@ PACKET_TYPE_ACIP_PARTICIPANT_JOINED
Participant joined notification (ACDS -> Existing Participants).
Definition packet.h:493
@ PACKET_TYPE_ACIP_PARTICIPANT_LEFT
Participant left notification (ACDS -> Remaining Participants).
Definition packet.h:495
void stats_runtime_packet(stats_peer_t *peer, unsigned type, size_t payload_bytes, bool sent, bool success)
Definition runtime.c:196
stats_peer_t * stats_peer
Owned statistics handle, destroyed with transport.

References ASCIICHAT_OK, ERROR_INVALID_PARAM, PACKET_TYPE_ACIP_PARTICIPANT_JOINED, PACKET_TYPE_ACIP_PARTICIPANT_LEFT, SET_ERRNO, acip_transport::stats_peer, and stats_runtime_packet().

Referenced by acip_client_receive_and_dispatch(), and session_protocol_dispatch().

◆ acip_handle_server_packet()

asciichat_error_t acip_handle_server_packet ( acip_transport_t * transport,
packet_type_t type,
const void * payload,
size_t payload_len,
void * client_ctx,
const acip_server_callbacks_t * callbacks )

Handle incoming packet on server side.

Dispatches packet to appropriate callback based on type. Transport-agnostic - works with TCP, WebSocket, etc.

Parameters
transportTransport instance
typePacket type
payloadPacket payload
payload_lenPayload length
client_ctxPer-client context (e.g., client_info_t*)
callbacksApplication callbacks
Returns
ASCIICHAT_OK on success, error code on failure

Definition at line 799 of file handlers.c.

801 {
802 stats_runtime_packet(transport ? transport->stats_peer : NULL, type, payload_len, false, true);
803 if (!transport || !callbacks) {
804 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid transport or callbacks");
805 }
806 (void)transport;
807
808 // DEBUG: Log all packet types received
809 log_dev("ACIP_HANDLE: type=%d payload_len=%zu", type, payload_len);
810
811 // O(1) dispatch via hash table lookup
812 int idx = handler_hash_lookup(g_server_handler_hash, type);
813 if (idx < 0) {
814 log_error("ACIP_HANDLER_NOT_FOUND: No handler for packet type=%d (0x%04x, name=%s)", type, type,
816 return SET_ERRNO(ERROR_INVALID_PARAM, "Unhandled server packet type: %d", type);
817 }
818
819 log_dev("HANDLER_DISPATCH: type=%d (%s), handler_idx=%d, payload=%zu bytes", type, acip_packet_type_name(type), idx,
820 payload_len);
821 asciichat_error_t result = g_server_handlers[idx](payload, payload_len, client_ctx, callbacks);
822
823 if (result != ASCIICHAT_OK) {
824 log_error("❌ [HANDLER_ERROR] Handler failed: type=%d (%s), result=%s", type, acip_packet_type_name(type),
825 asciichat_error_format(NULL, result));
826 } else {
827 log_dev("HANDLER_COMPLETE: type=%d (%s), payload=%zu bytes", type, acip_packet_type_name(type), payload_len);
828 }
829
830 return result;
831}
const char * asciichat_error_format(const char *message, asciichat_error_t code)
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
#define log_dev(...)
Log a DEV message (most verbose, development only).
Definition log/log.h:581
#define log_error(...)
Log an ERROR message.
Definition log/log.h:634
const char * acip_packet_type_name(uint16_t type)
Get human-readable name for packet type.
Definition handlers.c:648

References acip_packet_type_name(), asciichat_error_format(), ASCIICHAT_OK, ERROR_INVALID_PARAM, log_dev, log_error, SET_ERRNO, acip_transport::stats_peer, and stats_runtime_packet().

Referenced by acip_server_receive_and_dispatch(), handle_image_frame_h264_packet(), and server_dispatch_packet().

◆ acip_packet_type_name()

const char * acip_packet_type_name ( uint16_t type)

Get human-readable name for packet type.

Parameters
typePacket type from packet_type_t enum
Returns
String name or "UNKNOWN"

Definition at line 648 of file handlers.c.

648 {
649 switch (type) {
651 return "PROTOCOL_VERSION";
653 return "CRYPTO_CLIENT_HELLO";
655 return "CRYPTO_CAPABILITIES";
657 return "CRYPTO_PARAMETERS";
659 return "CRYPTO_KEY_EXCHANGE_INIT";
661 return "CRYPTO_KEY_EXCHANGE_RESP";
663 return "CRYPTO_AUTH_CHALLENGE";
665 return "CRYPTO_AUTH_RESPONSE";
667 return "CRYPTO_AUTH_FAILED";
669 return "CRYPTO_SERVER_AUTH_RESP";
671 return "CRYPTO_HANDSHAKE_COMPLETE";
673 return "CRYPTO_NO_ENCRYPTION";
675 return "ENCRYPTED";
677 return "CRYPTO_REKEY_REQUEST";
679 return "CRYPTO_REKEY_RESPONSE";
681 return "CRYPTO_REKEY_COMPLETE";
683 return "SIZE_MESSAGE";
685 return "AUDIO_MESSAGE";
687 return "TEXT_MESSAGE";
689 return "ERROR_MESSAGE";
691 return "REMOTE_LOG";
693 return "ASCII_FRAME";
695 return "IMAGE_FRAME";
697 return "IMAGE_FRAME_H265";
699 return "IMAGE_FRAME_H264";
701 return "AUDIO_BATCH";
703 return "AUDIO_OPUS_BATCH";
705 return "CLIENT_CAPABILITIES";
706 case PACKET_TYPE_PING:
707 return "PING";
708 case PACKET_TYPE_PONG:
709 return "PONG";
711 return "CLIENT_JOIN";
713 return "CLIENT_LEAVE";
715 return "STREAM_START";
717 return "STREAM_STOP";
719 return "CLEAR_CONSOLE";
721 return "SERVER_STATE";
723 return "ACIP_SESSION_CREATE";
725 return "ACIP_SESSION_CREATED";
727 return "ACIP_SESSION_LOOKUP";
729 return "ACIP_SESSION_INFO";
731 return "ACIP_SESSION_JOIN";
733 return "ACIP_SESSION_JOINED";
735 return "ACIP_SESSION_LEAVE";
737 return "ACIP_SESSION_END";
739 return "ACIP_SESSION_RECONNECT";
741 return "ACIP_WEBRTC_SDP";
743 return "ACIP_WEBRTC_ICE";
745 return "ACIP_STRING_RESERVE";
747 return "ACIP_STRING_RESERVED";
749 return "ACIP_STRING_RENEW";
751 return "ACIP_STRING_RELEASE";
753 return "ACIP_PARTICIPANT_LIST";
755 return "ACIP_RING_COLLECT";
757 return "ACIP_NETWORK_QUALITY";
759 return "ACIP_HOST_ANNOUNCEMENT";
761 return "ACIP_HOST_DESIGNATED";
763 return "ACIP_SETTINGS_SYNC";
765 return "ACIP_SETTINGS_ACK";
767 return "ACIP_HOST_LOST";
769 return "ACIP_FUTURE_HOST_ELECTED";
771 return "ACIP_PARTICIPANT_JOINED";
773 return "ACIP_PARTICIPANT_LEFT";
775 return "ACIP_BANDWIDTH_TEST";
777 return "ACIP_BANDWIDTH_RESULT";
779 return "ACIP_BROADCAST_ACK";
781 return "RING_MEMBERS";
783 return "STATS_COLLECTION_START";
785 return "STATS_UPDATE";
787 return "RING_ELECTION_RESULT";
789 return "STATS_ACK";
791 return "ACIP_DISCOVERY_PING";
793 return "ACIP_ERROR";
794 default:
795 return "UNKNOWN";
796 }
797}
@ PACKET_TYPE_CRYPTO_CLIENT_HELLO
Client -> Server: Expected server key fingerprint for multi-key selection (UNENCRYPTED).
Definition packet.h:314
@ PACKET_TYPE_ACIP_WEBRTC_ICE
WebRTC ICE candidate (bidirectional).
Definition packet.h:452
@ PACKET_TYPE_AUDIO_OPUS_BATCH
Batched Opus-encoded audio frames.
Definition packet.h:398
@ PACKET_TYPE_CLIENT_LEAVE
Clean disconnect notification.
Definition packet.h:413
@ PACKET_TYPE_ACIP_SESSION_INFO
Session info response (Discovery Server -> Client).
Definition packet.h:437
@ PACKET_TYPE_IMAGE_FRAME
Complete RGB image with dimensions.
Definition packet.h:385
@ PACKET_TYPE_CRYPTO_AUTH_RESPONSE
Client -> Server: {HMAC[32]} (UNENCRYPTED).
Definition packet.h:332
@ PACKET_TYPE_TEXT_MESSAGE
Text message.
Definition packet.h:372
@ PACKET_TYPE_AUDIO_MESSAGE
Audio message.
Definition packet.h:370
@ PACKET_TYPE_PONG
Keepalive pong response.
Definition packet.h:409
@ PACKET_TYPE_ACIP_SESSION_RECONNECT
Reconnect to session (Client -> Discovery Server).
Definition packet.h:447
@ PACKET_TYPE_CRYPTO_HANDSHAKE_COMPLETE
Server -> Client: "encryption ready" (UNENCRYPTED).
Definition packet.h:338
@ PACKET_TYPE_ACIP_PARTICIPANT_LIST
Participant list with ring order (ACDS -> Participants).
Definition packet.h:469
@ PACKET_TYPE_STREAM_START
Client requests to start sending video/audio.
Definition packet.h:415
@ PACKET_TYPE_ACIP_SETTINGS_SYNC
Settings sync (Initiator -> Host -> All Participants).
Definition packet.h:485
@ PACKET_TYPE_CRYPTO_KEY_EXCHANGE_INIT
Server -> Client: {server_pubkey[32]} (UNENCRYPTED).
Definition packet.h:326
@ PACKET_TYPE_ACIP_ERROR
Generic error response (Discovery Server -> Client).
Definition packet.h:533
@ PACKET_TYPE_CRYPTO_KEY_EXCHANGE_RESP
Client -> Server: {client_pubkey[32]} (UNENCRYPTED).
Definition packet.h:328
@ PACKET_TYPE_CRYPTO_REKEY_COMPLETE
Initiator -> Responder: Empty (encrypted with NEW key, but still handshake).
Definition packet.h:361
@ PACKET_TYPE_ACIP_NETWORK_QUALITY
NETWORK_QUALITY exchange (unified packet for all quality metrics).
Definition packet.h:479
@ PACKET_TYPE_SERVER_STATE
Server sends current state to clients.
Definition packet.h:421
@ PACKET_TYPE_ACIP_HOST_LOST
Host lost notification - lightweight (Participant -> ACDS).
Definition packet.h:489
@ PACKET_TYPE_ACIP_BROADCAST_ACK
Broadcast acknowledgment for reliable delivery.
Definition packet.h:508
@ PACKET_TYPE_ACIP_HOST_DESIGNATED
Host designated (ACDS -> All Participants).
Definition packet.h:483
@ PACKET_TYPE_ACIP_STRING_RESERVE
Reserve session string (Client -> Discovery Server).
Definition packet.h:455
@ PACKET_TYPE_CRYPTO_AUTH_FAILED
Server -> Client: "authentication failed" (UNENCRYPTED).
Definition packet.h:334
@ PACKET_TYPE_ENCRYPTED
Encrypted packet (after handshake completion).
Definition packet.h:355
@ PACKET_TYPE_CRYPTO_REKEY_REQUEST
Initiator -> Responder: {new_ephemeral_pk[32]} (UNENCRYPTED during rekey).
Definition packet.h:357
@ PACKET_TYPE_SIZE_MESSAGE
Terminal size message.
Definition packet.h:368
@ PACKET_TYPE_REMOTE_LOG
Bidirectional remote logging packet.
Definition packet.h:376
@ PACKET_TYPE_CRYPTO_SERVER_AUTH_RESP
Server -> Client: {HMAC[32]} server proves knowledge (UNENCRYPTED).
Definition packet.h:336
@ PACKET_TYPE_ACIP_HOST_ANNOUNCEMENT
Host announcement (Participant -> ACDS, "I won negotiation").
Definition packet.h:481
@ PACKET_TYPE_PROTOCOL_VERSION
Protocol version and capabilities negotiation.
Definition packet.h:303
@ PACKET_TYPE_ACIP_SETTINGS_ACK
Settings acknowledgment (Participant -> Initiator).
Definition packet.h:487
@ PACKET_TYPE_ACIP_BANDWIDTH_TEST
Bandwidth test request (Client -> ACDS).
Definition packet.h:503
@ PACKET_TYPE_CLEAR_CONSOLE
Server tells client to clear console.
Definition packet.h:419
@ PACKET_TYPE_CRYPTO_NO_ENCRYPTION
Client -> Server: "I want to proceed without encryption" (UNENCRYPTED).
Definition packet.h:340
@ PACKET_TYPE_ACIP_SESSION_CREATE
Create new session (Client -> Discovery Server).
Definition packet.h:431
@ PACKET_TYPE_STATS_UPDATE
Statistics update during collection phase (Participant -> Next Participant).
Definition packet.h:520
@ PACKET_TYPE_ACIP_STRING_RESERVED
String reserved response (Discovery Server -> Client).
Definition packet.h:457
@ PACKET_TYPE_IMAGE_FRAME_H265
H.265-encoded frame from client (HEVC/H.265 codec).
Definition packet.h:387
@ PACKET_TYPE_ACIP_DISCOVERY_PING
Discovery server ping (keepalive).
Definition packet.h:531
@ PACKET_TYPE_CRYPTO_AUTH_CHALLENGE
Server -> Client: {nonce[32]} (UNENCRYPTED).
Definition packet.h:330
@ PACKET_TYPE_ASCII_FRAME
Complete ASCII frame with all metadata.
Definition packet.h:383
@ PACKET_TYPE_CRYPTO_PARAMETERS
Server -> Client: Chosen algorithms + data sizes (UNENCRYPTED).
Definition packet.h:324
@ PACKET_TYPE_ACIP_SESSION_LOOKUP
Lookup session by string (Client -> Discovery Server).
Definition packet.h:435
@ PACKET_TYPE_CRYPTO_CAPABILITIES
Client -> Server: Supported crypto algorithms (UNENCRYPTED).
Definition packet.h:322
@ PACKET_TYPE_RING_ELECTION_RESULT
Final election result (Quorum Leader -> All Participants).
Definition packet.h:522
@ PACKET_TYPE_ACIP_SESSION_LEAVE
Leave session (Client -> Discovery Server).
Definition packet.h:443
@ PACKET_TYPE_ACIP_WEBRTC_SDP
WebRTC SDP offer/answer (bidirectional).
Definition packet.h:450
@ PACKET_TYPE_ACIP_SESSION_JOIN
Join existing session (Client -> Discovery Server).
Definition packet.h:439
@ PACKET_TYPE_ACIP_SESSION_CREATED
Session created response (Discovery Server -> Client).
Definition packet.h:433
@ PACKET_TYPE_STATS_ACK
Acknowledgment of statistics update (Participant -> Sender).
Definition packet.h:524
@ PACKET_TYPE_ACIP_STRING_RELEASE
Release string reservation (Client -> Discovery Server).
Definition packet.h:461
@ PACKET_TYPE_CLIENT_JOIN
Client announces capability to send media.
Definition packet.h:411
@ PACKET_TYPE_CLIENT_CAPABILITIES
Client reports terminal capabilities.
Definition packet.h:405
@ PACKET_TYPE_ACIP_FUTURE_HOST_ELECTED
Future host elected announcement (Quorum Leader -> ACDS -> All Participants).
Definition packet.h:491
@ PACKET_TYPE_IMAGE_FRAME_H264
Definition packet.h:389
@ PACKET_TYPE_ACIP_BANDWIDTH_RESULT
Bandwidth test results (ACDS -> Client).
Definition packet.h:505
@ PACKET_TYPE_ACIP_STRING_RENEW
Renew string reservation (Client -> Discovery Server).
Definition packet.h:459
@ PACKET_TYPE_ERROR_MESSAGE
Error packet with asciichat_error_t code and human-readable message.
Definition packet.h:374
@ PACKET_TYPE_RING_MEMBERS
Ring member list announcement (ACDS -> All Participants).
Definition packet.h:516
@ PACKET_TYPE_PING
Keepalive ping packet.
Definition packet.h:407
@ PACKET_TYPE_AUDIO_BATCH
Batched audio packets for efficiency.
Definition packet.h:396
@ PACKET_TYPE_CRYPTO_REKEY_RESPONSE
Responder -> Initiator: {new_ephemeral_pk[32]} (UNENCRYPTED during rekey).
Definition packet.h:359
@ PACKET_TYPE_ACIP_SESSION_JOINED
Session joined response (Discovery Server -> Client).
Definition packet.h:441
@ PACKET_TYPE_STATS_COLLECTION_START
Start statistics collection phase (Coordinator -> All Participants).
Definition packet.h:518
@ PACKET_TYPE_STREAM_STOP
Client stops sending media.
Definition packet.h:417
@ PACKET_TYPE_ACIP_RING_COLLECT
Ring collect request (Participant -> Next Participant).
Definition packet.h:471
@ PACKET_TYPE_ACIP_SESSION_END
End session (Host -> Discovery Server).
Definition packet.h:445

References PACKET_TYPE_ACIP_BANDWIDTH_RESULT, PACKET_TYPE_ACIP_BANDWIDTH_TEST, PACKET_TYPE_ACIP_BROADCAST_ACK, PACKET_TYPE_ACIP_DISCOVERY_PING, PACKET_TYPE_ACIP_ERROR, PACKET_TYPE_ACIP_FUTURE_HOST_ELECTED, PACKET_TYPE_ACIP_HOST_ANNOUNCEMENT, PACKET_TYPE_ACIP_HOST_DESIGNATED, PACKET_TYPE_ACIP_HOST_LOST, PACKET_TYPE_ACIP_NETWORK_QUALITY, PACKET_TYPE_ACIP_PARTICIPANT_JOINED, PACKET_TYPE_ACIP_PARTICIPANT_LEFT, PACKET_TYPE_ACIP_PARTICIPANT_LIST, PACKET_TYPE_ACIP_RING_COLLECT, PACKET_TYPE_ACIP_SESSION_CREATE, PACKET_TYPE_ACIP_SESSION_CREATED, PACKET_TYPE_ACIP_SESSION_END, PACKET_TYPE_ACIP_SESSION_INFO, PACKET_TYPE_ACIP_SESSION_JOIN, PACKET_TYPE_ACIP_SESSION_JOINED, PACKET_TYPE_ACIP_SESSION_LEAVE, PACKET_TYPE_ACIP_SESSION_LOOKUP, PACKET_TYPE_ACIP_SESSION_RECONNECT, PACKET_TYPE_ACIP_SETTINGS_ACK, PACKET_TYPE_ACIP_SETTINGS_SYNC, PACKET_TYPE_ACIP_STRING_RELEASE, PACKET_TYPE_ACIP_STRING_RENEW, PACKET_TYPE_ACIP_STRING_RESERVE, PACKET_TYPE_ACIP_STRING_RESERVED, PACKET_TYPE_ACIP_WEBRTC_ICE, PACKET_TYPE_ACIP_WEBRTC_SDP, PACKET_TYPE_ASCII_FRAME, PACKET_TYPE_AUDIO_BATCH, PACKET_TYPE_AUDIO_MESSAGE, PACKET_TYPE_AUDIO_OPUS_BATCH, PACKET_TYPE_CLEAR_CONSOLE, PACKET_TYPE_CLIENT_CAPABILITIES, PACKET_TYPE_CLIENT_JOIN, PACKET_TYPE_CLIENT_LEAVE, PACKET_TYPE_CRYPTO_AUTH_CHALLENGE, PACKET_TYPE_CRYPTO_AUTH_FAILED, PACKET_TYPE_CRYPTO_AUTH_RESPONSE, PACKET_TYPE_CRYPTO_CAPABILITIES, PACKET_TYPE_CRYPTO_CLIENT_HELLO, PACKET_TYPE_CRYPTO_HANDSHAKE_COMPLETE, PACKET_TYPE_CRYPTO_KEY_EXCHANGE_INIT, PACKET_TYPE_CRYPTO_KEY_EXCHANGE_RESP, PACKET_TYPE_CRYPTO_NO_ENCRYPTION, PACKET_TYPE_CRYPTO_PARAMETERS, PACKET_TYPE_CRYPTO_REKEY_COMPLETE, PACKET_TYPE_CRYPTO_REKEY_REQUEST, PACKET_TYPE_CRYPTO_REKEY_RESPONSE, PACKET_TYPE_CRYPTO_SERVER_AUTH_RESP, PACKET_TYPE_ENCRYPTED, PACKET_TYPE_ERROR_MESSAGE, PACKET_TYPE_IMAGE_FRAME, PACKET_TYPE_IMAGE_FRAME_H264, PACKET_TYPE_IMAGE_FRAME_H265, PACKET_TYPE_PING, PACKET_TYPE_PONG, PACKET_TYPE_PROTOCOL_VERSION, PACKET_TYPE_REMOTE_LOG, PACKET_TYPE_RING_ELECTION_RESULT, PACKET_TYPE_RING_MEMBERS, PACKET_TYPE_SERVER_STATE, PACKET_TYPE_SIZE_MESSAGE, PACKET_TYPE_STATS_ACK, PACKET_TYPE_STATS_COLLECTION_START, PACKET_TYPE_STATS_UPDATE, PACKET_TYPE_STREAM_START, PACKET_TYPE_STREAM_STOP, and PACKET_TYPE_TEXT_MESSAGE.

Referenced by acip_handle_server_packet(), and ascii_otel_packet().