208 return transport->
methods->
send(transport, data, len);
223 void **out_allocated_buffer) {
227 return transport->
methods->
recv(transport, buffer, out_len, out_allocated_buffer);
277static inline bool acip_transport_is_connected(
acip_transport_t *transport) {
⚠️‼️ Error and/or exit() when things go bad.
#define SET_ERRNO(code, context_msg,...)
Set error code with custom context message and log it.
asciichat_error_t
Error and exit codes - unified status values (0-255)
Cross-platform socket interface for ascii-chat.
Transport method table (virtual function table)
asciichat_error_t(* send)(acip_transport_t *transport, const void *data, size_t len)
Send data through this transport.
bool(* is_connected)(acip_transport_t *transport)
Check if transport is connected.
asciichat_error_t(* close)(acip_transport_t *transport)
Close this transport.
socket_t(* get_socket)(acip_transport_t *transport)
Get underlying socket (if applicable)
asciichat_error_t(* recv)(acip_transport_t *transport, void **buffer, size_t *out_len, void **out_allocated_buffer)
Receive data from this transport.
acip_transport_type_t(* get_type)(acip_transport_t *transport)
Get transport type.
Transport instance structure.
void * impl_data
Transport-specific state.
const acip_transport_methods_t * methods
Method table (virtual functions)
crypto_context_t * crypto_ctx
Optional encryption context.
Cryptographic context structure.
acip_transport_t * acip_tcp_transport_create(socket_t sockfd, crypto_context_t *crypto_ctx)
Create TCP transport from existing socket.
acip_transport_t * acip_webrtc_transport_create(struct webrtc_peer_connection *peer_conn, struct webrtc_data_channel *data_channel, crypto_context_t *crypto_ctx)
acip_transport_type_t
Transport type enumeration.
@ ACIP_TRANSPORT_TCP
Raw TCP socket.
@ ACIP_TRANSPORT_WEBSOCKET
WebSocket over TCP.
@ ACIP_TRANSPORT_WEBRTC
WebRTC DataChannel (P2P)
@ ACIP_TRANSPORT_HTTP
HTTP long-polling (future)
@ ACIP_TRANSPORT_QUIC
QUIC/UDP (future)
acip_transport_t * acip_websocket_transport_create(socket_t sockfd, crypto_context_t *crypto_ctx)
Create WebSocket transport from existing socket.
void acip_transport_destroy(acip_transport_t *transport)
Destroy transport and free all resources.