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

ACIP protocol message structures and helpers. More...

Go to the source code of this file.

Functions

const char * acip_packet_type_name (uint16_t type)
 Get human-readable name for packet type.

Detailed Description

ACIP protocol message structures and helpers.

This header provides a centralized location for all ACIP message structures used in ACIP packets. It includes packet structures from packet.h and adds ACIP-specific helpers and type definitions.

ACIP PACKET RANGES:

  • Packets 1-35: Core ascii-chat protocol (video, audio, control)
  • Packets 6000-6199: ACDS discovery service protocol

DESIGN RATIONALE:

Rather than duplicating structures, we include packet.h which already defines all core protocol structures (ascii_frame_packet_t, etc.). This header adds convenience helpers and ACIP-specific functionality.

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

Definition in file messages.h.

Function Documentation

◆ 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_ACIP_PARTICIPANT_JOINED
Participant joined notification (ACDS -> Existing Participants).
Definition packet.h:493
@ 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_PARTICIPANT_LEFT
Participant left notification (ACDS -> Remaining Participants).
Definition packet.h:495
@ 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().