|
ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
|
Manage WebRTC peer connections for session participants. More...
Data Structures | |
| struct | webrtc_peer_manager_config_t |
| Peer manager configuration. More... | |
| struct | webrtc_signaling_callbacks_t |
| Signaling callbacks for sending SDP/ICE. More... | |
Typedefs | |
| typedef struct webrtc_peer_manager | webrtc_peer_manager_t |
| typedef void(* | webrtc_transport_ready_callback_t) (acip_transport_t *transport, const uint8_t participant_id[16], void *user_data) |
| Callback when DataChannel is ready and wrapped in ACIP transport. | |
| typedef asciichat_error_t(* | webrtc_send_sdp_callback_t) (const uint8_t session_id[16], const uint8_t recipient_id[16], const char *sdp_type, const char *sdp, void *user_data) |
| Callback to send SDP via ACDS signaling. | |
| typedef asciichat_error_t(* | webrtc_send_ice_callback_t) (const uint8_t session_id[16], const uint8_t recipient_id[16], const char *candidate, const char *mid, void *user_data) |
| Callback to send ICE candidate via ACDS signaling. | |
Enumerations | |
| enum | webrtc_peer_role_t { WEBRTC_ROLE_CREATOR = 0 , WEBRTC_ROLE_JOINER = 1 } |
| Peer connection role (server or client) More... | |
Functions | |
| asciichat_error_t | webrtc_peer_manager_create (const webrtc_peer_manager_config_t *config, const webrtc_signaling_callbacks_t *signaling_callbacks, webrtc_peer_manager_t **manager_out) |
| Create a WebRTC peer manager. | |
| void | webrtc_peer_manager_destroy (webrtc_peer_manager_t *manager) |
| Destroy peer manager and close all connections. | |
| asciichat_error_t | webrtc_peer_manager_handle_sdp (webrtc_peer_manager_t *manager, const acip_webrtc_sdp_t *sdp) |
| Handle incoming SDP message from ACDS. | |
| asciichat_error_t | webrtc_peer_manager_handle_ice (webrtc_peer_manager_t *manager, const acip_webrtc_ice_t *ice) |
| Handle incoming ICE candidate from ACDS. | |
| asciichat_error_t | webrtc_peer_manager_connect (webrtc_peer_manager_t *manager, const uint8_t session_id[16], const uint8_t participant_id[16]) |
| Initiate connection to remote peer (joiner role only) | |
Manage WebRTC peer connections for session participants.
| typedef struct webrtc_peer_manager webrtc_peer_manager_t |
#include <peer_manager.h>
Definition at line 50 of file peer_manager.h.
| typedef asciichat_error_t(* webrtc_send_ice_callback_t) (const uint8_t session_id[16], const uint8_t recipient_id[16], const char *candidate, const char *mid, void *user_data) |
#include <peer_manager.h>
Callback to send ICE candidate via ACDS signaling.
| session_id | Session UUID (16 bytes) |
| recipient_id | Recipient participant UUID (16 bytes, all zeros for broadcast) |
| candidate | ICE candidate string (null-terminated) |
| mid | Media stream ID (null-terminated) |
| user_data | User context pointer |
Implementation should send PACKET_TYPE_ACIP_WEBRTC_ICE via ACDS.
Definition at line 112 of file peer_manager.h.
| typedef asciichat_error_t(* webrtc_send_sdp_callback_t) (const uint8_t session_id[16], const uint8_t recipient_id[16], const char *sdp_type, const char *sdp, void *user_data) |
#include <peer_manager.h>
Callback to send SDP via ACDS signaling.
| session_id | Session UUID (16 bytes) |
| recipient_id | Recipient participant UUID (16 bytes, all zeros for broadcast) |
| sdp_type | SDP type ("offer" or "answer") |
| sdp | SDP string (null-terminated) |
| user_data | User context pointer |
Implementation should send PACKET_TYPE_ACIP_WEBRTC_SDP via ACDS.
Definition at line 98 of file peer_manager.h.
| typedef void(* webrtc_transport_ready_callback_t) (acip_transport_t *transport, const uint8_t participant_id[16], void *user_data) |
#include <peer_manager.h>
Callback when DataChannel is ready and wrapped in ACIP transport.
| transport | ACIP transport wrapping the WebRTC DataChannel |
| participant_id | Remote participant UUID (16 bytes) |
| user_data | User context pointer |
The callback receives ownership of the transport and must either:
Definition at line 70 of file peer_manager.h.
| enum webrtc_peer_role_t |
#include <peer_manager.h>
Peer connection role (server or client)
| Enumerator | |
|---|---|
| WEBRTC_ROLE_CREATOR | Session creator - accepts offers, generates answers. |
| WEBRTC_ROLE_JOINER | Session joiner - generates offers, receives answers. |
Definition at line 55 of file peer_manager.h.
| asciichat_error_t webrtc_peer_manager_connect | ( | webrtc_peer_manager_t * | manager, |
| const uint8_t | session_id[16], | ||
| const uint8_t | participant_id[16] | ||
| ) |
#include <peer_manager.h>
Initiate connection to remote peer (joiner role only)
| manager | Peer manager |
| session_id | Session UUID (16 bytes) |
| participant_id | Remote participant UUID to connect to (16 bytes) |
Creates peer connection, generates SDP offer, and sends via signaling. Only valid for WEBRTC_ROLE_JOINER (session joiners initiate connections).
Creator role uses webrtc_peer_manager_handle_sdp() to accept offers instead.
Definition at line 417 of file peer_manager.c.
References ASCIICHAT_OK, ERROR_INVALID_PARAM, log_info, mutex_lock, mutex_unlock, participant_id, peer_entry_t::pc, peers_mutex, role, session_id, SET_ERRNO, webrtc_create_offer(), and WEBRTC_ROLE_JOINER.
| asciichat_error_t webrtc_peer_manager_create | ( | const webrtc_peer_manager_config_t * | config, |
| const webrtc_signaling_callbacks_t * | signaling_callbacks, | ||
| webrtc_peer_manager_t ** | manager_out | ||
| ) |
#include <peer_manager.h>
Create a WebRTC peer manager.
| config | Manager configuration |
| signaling_callbacks | Callbacks for sending SDP/ICE |
| manager_out | Output parameter for manager handle |
Creates a manager for WebRTC peer connections. The manager handles:
Definition at line 293 of file peer_manager.c.
References ASCIICHAT_OK, config, ERROR_INTERNAL, ERROR_INVALID_PARAM, ERROR_MEMORY, log_info, mutex_init(), peers, peers_mutex, role, webrtc_peer_manager_config_t::role, SAFE_FREE, SAFE_MALLOC, webrtc_signaling_callbacks_t::send_ice, webrtc_signaling_callbacks_t::send_sdp, SET_ERRNO, signaling, and WEBRTC_ROLE_CREATOR.
Referenced by server_main().
| void webrtc_peer_manager_destroy | ( | webrtc_peer_manager_t * | manager | ) |
#include <peer_manager.h>
Destroy peer manager and close all connections.
| manager | Peer manager to destroy |
Closes all active peer connections gracefully and frees resources. Safe to call with NULL pointer.
Definition at line 326 of file peer_manager.c.
References log_debug, mutex_destroy(), mutex_lock, mutex_unlock, peers, peers_mutex, and SAFE_FREE.
Referenced by connection_context_cleanup(), and server_main().
| asciichat_error_t webrtc_peer_manager_handle_ice | ( | webrtc_peer_manager_t * | manager, |
| const acip_webrtc_ice_t * | ice | ||
| ) |
#include <peer_manager.h>
Handle incoming ICE candidate from ACDS.
| manager | Peer manager |
| ice | ICE candidate message received from ACDS |
Adds remote ICE candidate to the appropriate peer connection. If peer connection doesn't exist yet, queues candidate for later.
Definition at line 385 of file peer_manager.c.
References ASCIICHAT_OK, ERROR_INVALID_PARAM, log_debug, log_warn, mutex_lock, mutex_unlock, peer_entry_t::pc, peers_mutex, SET_ERRNO, and webrtc_add_remote_candidate().
| asciichat_error_t webrtc_peer_manager_handle_sdp | ( | webrtc_peer_manager_t * | manager, |
| const acip_webrtc_sdp_t * | sdp | ||
| ) |
#include <peer_manager.h>
Handle incoming SDP message from ACDS.
| manager | Peer manager |
| sdp | SDP message received from ACDS |
Processes SDP offer or answer from remote peer:
Sends response SDP via signaling callbacks.
Definition at line 347 of file peer_manager.c.
References ASCIICHAT_OK, ERROR_INVALID_PARAM, log_debug, mutex_lock, mutex_unlock, peer_entry_t::pc, peers_mutex, role, SET_ERRNO, WEBRTC_ROLE_CREATOR, and webrtc_set_remote_description().