|
ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
|
Go to the source code of this file.
Functions | |
| discovery_session_t * | discovery_session_create (const discovery_config_t *config) |
| Create a new discovery session. | |
| void | discovery_session_destroy (discovery_session_t *session) |
| Destroy discovery session and free resources. | |
| asciichat_error_t | discovery_session_start (discovery_session_t *session) |
| Start the discovery session. | |
| asciichat_error_t | discovery_session_process (discovery_session_t *session, int64_t timeout_ns) |
| Process session events (call in main loop) | |
| void | discovery_session_stop (discovery_session_t *session) |
| Stop the discovery session. | |
| discovery_state_t | discovery_session_get_state (const discovery_session_t *session) |
| Get current session state. | |
| bool | discovery_session_is_active (const discovery_session_t *session) |
| Check if session is active (call in progress) | |
| const char * | discovery_session_get_string (const discovery_session_t *session) |
| Get session string. | |
| bool | discovery_session_is_host (const discovery_session_t *session) |
| Check if we are the host. | |
| session_host_t * | discovery_session_get_host (discovery_session_t *session) |
| Get host context (if we are host) | |
| session_participant_t * | discovery_session_get_participant (discovery_session_t *session) |
| Get participant context (if we are participant) | |
| asciichat_error_t | discovery_session_init_ring (discovery_session_t *session) |
| Initialize ring consensus state. | |
| asciichat_error_t | discovery_session_start_ring_round (discovery_session_t *session) |
| Start a new ring consensus round (every 5 minutes or on new joiner) | |
| asciichat_error_t | discovery_session_check_host_alive (discovery_session_t *session) |
| Detect host disconnect (check connection status) | |
| asciichat_error_t | discovery_session_handle_host_disconnect (discovery_session_t *session, uint32_t disconnect_reason) |
| Handle host disconnect with automatic failover to future host. | |
| asciichat_error_t | discovery_session_become_host (discovery_session_t *session) |
| Become the host (called when elected as future host) | |
| asciichat_error_t | discovery_session_connect_to_future_host (discovery_session_t *session) |
| Connect to pre-elected future host (called when NOT future host) | |
| asciichat_error_t | discovery_session_get_future_host (const discovery_session_t *session, uint8_t out_id[16], char out_address[64], uint16_t *out_port, uint8_t *out_connection_type) |
| Get future host information. | |
| bool | discovery_session_is_future_host (const discovery_session_t *session) |
| Check if we are the future host. | |
| asciichat_error_t discovery_session_become_host | ( | discovery_session_t * | session | ) |
Become the host (called when elected as future host)
| session | Session context |
Definition at line 2080 of file src/discovery/session.c.
References discovery_session_t::acds_socket, DISCOVERY_STATE_ACTIVE, discovery_session_t::host_ctx, discovery_session_t::is_host, discovery_session_t::migration, MIGRATION_STATE_COMPLETE, packet_send(), discovery_session_t::participant_id, session_host_create(), session_host_start(), discovery_session_t::session_id, and migration_ctx_t::state.
Referenced by discovery_session_handle_host_disconnect().
| asciichat_error_t discovery_session_check_host_alive | ( | discovery_session_t * | session | ) |
Detect host disconnect (check connection status)
| session | Session context |
Definition at line 1957 of file src/discovery/session.c.
References host_liveness_t::consecutive_failures, discovery_session_t::is_host, host_liveness_t::last_ping_sent_ms, discovery_session_t::liveness, host_liveness_t::max_failures, discovery_session_t::migration, MIGRATION_STATE_NONE, packet_send(), discovery_session_t::participant_ctx, host_liveness_t::ping_in_flight, host_liveness_t::ping_interval_ms, session_participant_get_socket(), discovery_session_t::session_type, migration_ctx_t::state, host_liveness_t::timeout_ms, and discovery_session_t::webrtc_transport_ready.
Referenced by discovery_session_process().
| asciichat_error_t discovery_session_connect_to_future_host | ( | discovery_session_t * | session | ) |
Connect to pre-elected future host (called when NOT future host)
| session | Session context |
Definition at line 2145 of file src/discovery/session.c.
References session_participant::address, DISCOVERY_STATE_ACTIVE, ring_consensus_t::future_host_address, ring_consensus_t::future_host_connection_type, ring_consensus_t::future_host_id, ring_consensus_t::future_host_port, discovery_session_t::host_address, discovery_session_t::host_id, discovery_session_t::host_port, discovery_session_t::migration, MIGRATION_STATE_COMPLETE, discovery_session_t::participant_ctx, discovery_session_t::ring, session_participant_connect(), session_participant_create(), session_participant_destroy(), and migration_ctx_t::state.
Referenced by discovery_session_handle_host_disconnect().
| discovery_session_t * discovery_session_create | ( | const discovery_config_t * | config | ) |
Create a new discovery session.
| config | Session configuration |
Definition at line 48 of file src/discovery/session.c.
References discovery_session_t::acds_address, discovery_config_t::acds_address, acds_identity_default_path(), acds_identity_fingerprint(), acds_identity_generate(), acds_identity_load(), acds_identity_save(), discovery_session_t::acds_port, discovery_config_t::acds_port, discovery_session_t::acds_socket, discovery_session_t::callback_user_data, discovery_config_t::callback_user_data, host_liveness_t::consecutive_failures, DISCOVERY_STATE_INIT, discovery_session_t::exit_callback_data, discovery_config_t::exit_callback_data, discovery_session_t::host_ctx, discovery_session_t::identity_pubkey, discovery_session_t::identity_seckey, discovery_session_t::is_initiator, host_liveness_t::last_ping_sent_ms, host_liveness_t::last_pong_received_ms, discovery_session_t::liveness, host_liveness_t::max_failures, discovery_session_t::on_error, discovery_config_t::on_error, discovery_session_t::on_session_ready, discovery_config_t::on_session_ready, discovery_session_t::on_state_change, discovery_config_t::on_state_change, discovery_session_t::participant_ctx, discovery_session_t::peer_manager, host_liveness_t::ping_in_flight, host_liveness_t::ping_interval_ms, discovery_session_t::session_string, discovery_config_t::session_string, discovery_session_t::should_exit_callback, discovery_config_t::should_exit_callback, discovery_session_t::state, discovery_session_t::stun_count, discovery_session_t::stun_servers, host_liveness_t::timeout_ms, discovery_session_t::turn_count, discovery_session_t::turn_servers, discovery_session_t::webrtc_connection_initiated, discovery_session_t::webrtc_last_attempt_time_ms, discovery_session_t::webrtc_retry_attempt, and discovery_session_t::webrtc_transport_ready.
Referenced by discovery_main().
| void discovery_session_destroy | ( | discovery_session_t * | session | ) |
Destroy discovery session and free resources.
| session | Session to destroy |
Definition at line 140 of file src/discovery/session.c.
References discovery_session_t::acds_socket, discovery_session_t::host_ctx, discovery_session_t::participant_ctx, discovery_session_t::peer_manager, session_host_destroy(), session_participant_destroy(), discovery_session_t::stun_count, discovery_session_t::stun_servers, discovery_session_t::turn_count, discovery_session_t::turn_servers, and webrtc_peer_manager_destroy().
Referenced by discovery_main().
| asciichat_error_t discovery_session_get_future_host | ( | const discovery_session_t * | session, |
| uint8_t | out_id[16], | ||
| char | out_address[64], | ||
| uint16_t * | out_port, | ||
| uint8_t * | out_connection_type | ||
| ) |
Get future host information.
| session | Session context |
| out_id | Output: Future host participant ID |
| out_address | Output: Future host address |
| out_port | Output: Future host port |
| out_connection_type | Output: Connection type |
Definition at line 2201 of file src/discovery/session.c.
References ring_consensus_t::future_host_address, ring_consensus_t::future_host_connection_type, ring_consensus_t::future_host_id, ring_consensus_t::future_host_port, and discovery_session_t::ring.
| session_host_t * discovery_session_get_host | ( | discovery_session_t * | session | ) |
Get host context (if we are host)
| session | Session context |
Definition at line 1805 of file src/discovery/session.c.
References discovery_session_t::host_ctx.
| session_participant_t * discovery_session_get_participant | ( | discovery_session_t * | session | ) |
Get participant context (if we are participant)
| session | Session context |
Definition at line 1813 of file src/discovery/session.c.
References discovery_session_t::participant_ctx.
| discovery_state_t discovery_session_get_state | ( | const discovery_session_t * | session | ) |
Get current session state.
| session | Session context |
Definition at line 1773 of file src/discovery/session.c.
References DISCOVERY_STATE_FAILED, and discovery_session_t::state.
| const char * discovery_session_get_string | ( | const discovery_session_t * | session | ) |
Get session string.
| session | Session context |
Definition at line 1789 of file src/discovery/session.c.
References discovery_session_t::session_string.
| asciichat_error_t discovery_session_handle_host_disconnect | ( | discovery_session_t * | session, |
| uint32_t | disconnect_reason | ||
| ) |
Handle host disconnect with automatic failover to future host.
| session | Session context |
| disconnect_reason | Reason code for disconnect |
Definition at line 2030 of file src/discovery/session.c.
References discovery_session_t::acds_socket, ring_consensus_t::am_future_host, migration_ctx_t::detection_time_ms, migration_ctx_t::disconnect_reason, discovery_session_become_host(), discovery_session_connect_to_future_host(), ring_consensus_t::future_host_address, ring_consensus_t::future_host_id, ring_consensus_t::future_host_port, discovery_session_t::host_id, migration_ctx_t::last_host_id, discovery_session_t::migration, MIGRATION_STATE_COMPLETE, MIGRATION_STATE_DETECTED, MIGRATION_STATE_FAILOVER, packet_send(), discovery_session_t::participant_id, discovery_session_t::ring, discovery_session_t::session_id, and migration_ctx_t::state.
Referenced by discovery_session_process().
| asciichat_error_t discovery_session_init_ring | ( | discovery_session_t * | session | ) |
Initialize ring consensus state.
Simplified for host-mediated architecture - just initializes timing, no participant list needed (host runs the election).
| session | Session context |
Definition at line 1912 of file src/discovery/session.c.
References ring_consensus_t::am_future_host, ring_consensus_t::future_host_id, ring_consensus_t::last_ring_round_ms, and discovery_session_t::ring.
| bool discovery_session_is_active | ( | const discovery_session_t * | session | ) |
Check if session is active (call in progress)
| session | Session context |
Definition at line 1781 of file src/discovery/session.c.
References DISCOVERY_STATE_ACTIVE, and discovery_session_t::state.
| bool discovery_session_is_future_host | ( | const discovery_session_t * | session | ) |
Check if we are the future host.
| session | Session context |
Definition at line 2222 of file src/discovery/session.c.
References ring_consensus_t::am_future_host, and discovery_session_t::ring.
| bool discovery_session_is_host | ( | const discovery_session_t * | session | ) |
Check if we are the host.
| session | Session context |
Definition at line 1797 of file src/discovery/session.c.
References discovery_session_t::is_host.
| asciichat_error_t discovery_session_process | ( | discovery_session_t * | session, |
| int64_t | timeout_ns | ||
| ) |
Process session events (call in main loop)
Handles incoming ACDS messages, negotiation, and state transitions.
| session | Session context |
| timeout_ns | Max time to wait for events in nanoseconds (0 = non-blocking) |
Definition at line 1256 of file src/discovery/session.c.
References discovery_session_t::acds_socket, buffer_pool_free(), discovery_session_t::callback_user_data, migration_ctx_t::detection_time_ms, discovery_session_check_host_alive(), discovery_session_handle_host_disconnect(), DISCOVERY_STATE_ACTIVE, DISCOVERY_STATE_CONNECTING_HOST, DISCOVERY_STATE_FAILED, DISCOVERY_STATE_MIGRATING, DISCOVERY_STATE_NEGOTIATING, DISCOVERY_STATE_STARTING_HOST, DISCOVERY_STATE_WAITING_PEER, discovery_session_t::error, negotiate_ctx_t::host_address, discovery_session_t::host_address, discovery_session_t::host_ctx, discovery_session_t::host_id, negotiate_ctx_t::host_port, discovery_session_t::host_port, discovery_session_t::is_host, discovery_session_t::is_initiator, discovery_session_t::migration, MIGRATION_STATE_COMPLETE, nat_compute_tier(), discovery_session_t::negotiate, negotiate_determine_result(), negotiate_init(), NEGOTIATE_STATE_COMPARING, NEGOTIATE_STATE_INIT, discovery_session_t::on_session_ready, options_get(), negotiate_ctx_t::our_quality, packet_receive(), discovery_session_t::participant_ctx, discovery_session_t::participant_id, discovery_session_t::peer_manager, negotiate_ctx_t::peer_quality, negotiate_ctx_t::peer_quality_received, platform_get_monotonic_time_us(), platform_sleep_ms(), platform_sleep_us(), receive_packet(), send_crypto_capabilities_packet(), send_protocol_version_packet(), session_host_create(), session_host_start(), discovery_session_t::session_id, session_participant_connect(), session_participant_create(), session_participant_disconnect(), session_participant_get_socket(), session_participant_is_connected(), discovery_session_t::session_string, discovery_session_t::session_type, socket_set_timeout(), negotiate_ctx_t::state, migration_ctx_t::state, discovery_session_t::state, negotiate_ctx_t::we_are_host, discovery_session_t::webrtc_connection_initiated, discovery_session_t::webrtc_last_attempt_time_ms, webrtc_peer_manager_check_gathering_timeouts(), webrtc_peer_manager_connect(), webrtc_peer_manager_destroy(), discovery_session_t::webrtc_retry_attempt, and discovery_session_t::webrtc_transport_ready.
| asciichat_error_t discovery_session_start | ( | discovery_session_t * | session | ) |
Start the discovery session.
Connects to ACDS and either creates or joins a session.
| session | Session context |
Definition at line 1209 of file src/discovery/session.c.
References discovery_session_t::exit_callback_data, discovery_session_t::is_initiator, discovery_session_t::participant_ctx, discovery_session_t::session_string, discovery_session_t::should_exit_callback, and discovery_session_t::state.
Referenced by discovery_main().
| asciichat_error_t discovery_session_start_ring_round | ( | discovery_session_t * | session | ) |
Start a new ring consensus round (every 5 minutes or on new joiner)
| session | Session context |
Definition at line 1928 of file src/discovery/session.c.
References discovery_session_t::is_host, ring_consensus_t::last_ring_round_ms, and discovery_session_t::ring.
| void discovery_session_stop | ( | discovery_session_t * | session | ) |
Stop the discovery session.
| session | Session context |
Definition at line 1752 of file src/discovery/session.c.
References discovery_session_t::acds_socket, DISCOVERY_STATE_ENDED, packet_send(), discovery_session_t::participant_id, and discovery_session_t::session_id.
Referenced by discovery_main().