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

Go to the source code of this file.

Functions

asciichat_error_t quic_transport_attach (quic_connection_t *connection, crypto_context_t *crypto, acip_transport_t **out)
asciichat_error_t quic_transport_attach_serialized (quic_connection_t *connection, crypto_context_t *crypto, mutex_t *lane, acip_transport_t **out)
asciichat_error_t quic_transport_attach_on_lane (quic_connection_t *connection, crypto_context_t *crypto, mutex_t *lane, acip_transport_t **out)
asciichat_error_t quic_transport_attach_on_lane_with_waker (quic_connection_t *connection, mutex_t *lane, void(*wake)(void *), void *context, void(*on_destroy)(acip_transport_t *, void *), void *destroy_context, acip_transport_t **out)
asciichat_error_t quic_transport_fail (acip_transport_t *transport, asciichat_error_t reason)
asciichat_error_t quic_transport_fail_on_lane (acip_transport_t *transport, asciichat_error_t reason)
asciichat_error_t quic_transport_destroy_unclaimed_on_lane (acip_transport_t **transport, asciichat_error_t reason)
asciichat_error_t quic_transport_set_waker_on_lane (acip_transport_t *transport, void(*wake)(void *), void *context)
void quic_transport_set_close_on_lane (acip_transport_t *transport, void(*close)(quic_connection_t *, void *), void *context)
asciichat_error_t quic_transport_set_waker (acip_transport_t *transport, void(*wake)(void *), void *context)
asciichat_error_t quic_transport_begin_security (acip_transport_t *transport, crypto_context_t *crypto)
bool quic_transport_security_ready (acip_transport_t *transport)
asciichat_error_t quic_transport_allow_media (acip_transport_t *transport)

Function Documentation

◆ quic_transport_allow_media()

asciichat_error_t quic_transport_allow_media ( acip_transport_t * transport)

Definition at line 378 of file quic/transport.c.

378 {
379 if (!transport || transport->methods != &quic_methods)
380 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport");
381 quic_transport_t *quic = transport->impl_data;
382 lane_lock(quic);
384 : SET_ERRNO(quic->failure, "QUIC transport is closed");
385 lane_unlock(quic);
386 return result;
387}
#define SET_ERRNO(code,...)
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
@ ERROR_INVALID_PARAM
asciichat_error_t quic_connection_allow_media(quic_connection_t *connection)
void * impl_data
Transport-specific state.
const acip_transport_methods_t * methods
Method table (virtual functions).
quic_connection_t * connection

◆ quic_transport_attach()

asciichat_error_t quic_transport_attach ( quic_connection_t * connection,
crypto_context_t * crypto,
acip_transport_t ** out )

Definition at line 538 of file quic/transport.c.

539 {
540 return attach_transport(connection, crypto, NULL, false, NULL, NULL, NULL, NULL, out);
541}
static bool size_t gotel_query_t * out
Definition queries.h:8

References out.

◆ quic_transport_attach_on_lane()

asciichat_error_t quic_transport_attach_on_lane ( quic_connection_t * connection,
crypto_context_t * crypto,
mutex_t * lane,
acip_transport_t ** out )

Definition at line 553 of file quic/transport.c.

554 {
555 if (!lane) {
556 if (out)
557 *out = NULL;
558 return SET_ERRNO(ERROR_INVALID_PARAM, "Missing QUIC lane mutex");
559 }
560 return attach_transport(connection, crypto, lane, true, NULL, NULL, NULL, NULL, out);
561}

References ERROR_INVALID_PARAM, out, and SET_ERRNO.

◆ quic_transport_attach_on_lane_with_waker()

asciichat_error_t quic_transport_attach_on_lane_with_waker ( quic_connection_t * connection,
mutex_t * lane,
void(* wake )(void *),
void * context,
void(* on_destroy )(acip_transport_t *, void *),
void * destroy_context,
acip_transport_t ** out )

Definition at line 563 of file quic/transport.c.

566 {
567 if (!lane) {
568 if (out)
569 *out = NULL;
570 return SET_ERRNO(ERROR_INVALID_PARAM, "Missing QUIC lane mutex");
571 }
572 return attach_transport(connection, NULL, lane, true, wake, context, on_destroy, destroy_context, out);
573}

References ERROR_INVALID_PARAM, out, and SET_ERRNO.

◆ quic_transport_attach_serialized()

asciichat_error_t quic_transport_attach_serialized ( quic_connection_t * connection,
crypto_context_t * crypto,
mutex_t * lane,
acip_transport_t ** out )

Definition at line 543 of file quic/transport.c.

544 {
545 if (!lane) {
546 if (out)
547 *out = NULL;
548 return SET_ERRNO(ERROR_INVALID_PARAM, "Missing QUIC lane mutex");
549 }
550 return attach_transport(connection, crypto, lane, false, NULL, NULL, NULL, NULL, out);
551}

References ERROR_INVALID_PARAM, out, and SET_ERRNO.

◆ quic_transport_begin_security()

asciichat_error_t quic_transport_begin_security ( acip_transport_t * transport,
crypto_context_t * crypto )

Definition at line 324 of file quic/transport.c.

324 {
325 if (!transport || transport->methods != &quic_methods || !crypto)
326 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport security context");
327 quic_transport_t *quic = transport->impl_data;
328 lane_lock(quic);
330 : SET_ERRNO(quic->failure, "QUIC transport is closed");
331 if (result == ASCIICHAT_OK) {
332 transport->crypto_ctx = crypto;
333 result = acip_security_activate(transport);
334 if (quic->wake)
335 quic->wake(quic->wake_context);
336 }
337 lane_unlock(quic);
338 if (result == ASCIICHAT_OK && quic->lane)
339 result = acip_outbound_create(transport);
340 return result;
341}
asciichat_error_t acip_outbound_create(acip_transport_t *transport)
@ ASCIICHAT_OK
Definition error_codes.h:46
asciichat_error_t acip_security_activate(acip_transport_t *transport)
asciichat_error_t quic_connection_enable_security(quic_connection_t *connection, crypto_context_t *crypto)
crypto_context_t * crypto_ctx
Optional encryption context.
void(* wake)(void *)

◆ quic_transport_destroy_unclaimed_on_lane()

asciichat_error_t quic_transport_destroy_unclaimed_on_lane ( acip_transport_t ** transport,
asciichat_error_t reason )

Definition at line 285 of file quic/transport.c.

285 {
286 if (!transport || !*transport || (*transport)->methods != &quic_methods || (*transport)->outbound ||
287 (*transport)->stats_peer || reason == ASCIICHAT_OK)
288 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid unclaimed QUIC transport");
289 quic_transport_t *quic = (*transport)->impl_data;
290 asciichat_error_t result = quic_close_locked(quic, reason);
291 if (result != ASCIICHAT_OK)
292 return result;
293 if (quic->lane)
294 cond_destroy(&quic->received);
295 if (quic->lane)
296 cond_destroy(&quic->security_changed);
297 SAFE_FREE((*transport)->impl_data);
298 SAFE_FREE(*transport);
299 *transport = NULL;
300 return ASCIICHAT_OK;
301}
#define SAFE_FREE(ptr)
Definition common.h:377

References ASCIICHAT_OK, ERROR_INVALID_PARAM, quic_transport_t::lane, acip_transport::methods, quic_transport_t::received, SAFE_FREE, quic_transport_t::security_changed, and SET_ERRNO.

◆ quic_transport_fail()

asciichat_error_t quic_transport_fail ( acip_transport_t * transport,
asciichat_error_t reason )

Definition at line 269 of file quic/transport.c.

269 {
270 if (!transport || transport->methods != &quic_methods || reason == ASCIICHAT_OK)
271 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport failure");
272 quic_transport_t *quic = transport->impl_data;
273 lane_lock(quic);
274 asciichat_error_t result = quic_close_locked(quic, reason);
275 lane_unlock(quic);
276 return result;
277}

References ASCIICHAT_OK, ERROR_INVALID_PARAM, acip_transport::impl_data, acip_transport::methods, and SET_ERRNO.

◆ quic_transport_fail_on_lane()

asciichat_error_t quic_transport_fail_on_lane ( acip_transport_t * transport,
asciichat_error_t reason )

Definition at line 279 of file quic/transport.c.

279 {
280 if (!transport || transport->methods != &quic_methods || reason == ASCIICHAT_OK)
281 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport failure");
282 return quic_close_locked(transport->impl_data, reason);
283}

References ASCIICHAT_OK, ERROR_INVALID_PARAM, acip_transport::impl_data, acip_transport::methods, and SET_ERRNO.

Referenced by quic_endpoint_stop(), and quic_release().

◆ quic_transport_security_ready()

bool quic_transport_security_ready ( acip_transport_t * transport)

Definition at line 343 of file quic/transport.c.

343 {
344 if (!transport || transport->methods != &quic_methods)
345 return false;
346 quic_transport_t *quic = transport->impl_data;
347 lane_lock(quic);
348 bool ready = quic->connected && quic_connection_security_ready(quic->connection);
349 lane_unlock(quic);
350 return ready;
351}
bool quic_connection_security_ready(const quic_connection_t *connection)

◆ quic_transport_set_close_on_lane()

void quic_transport_set_close_on_lane ( acip_transport_t * transport,
void(* close )(quic_connection_t *, void *),
void * context )

Definition at line 262 of file quic/transport.c.

263 {
264 quic_transport_t *quic = transport->impl_data;
265 quic->on_close = close;
266 quic->close_context = context;
267}
void(* on_close)(quic_connection_t *, void *)

References quic_transport_t::close_context, acip_transport::impl_data, and quic_transport_t::on_close.

◆ quic_transport_set_waker()

asciichat_error_t quic_transport_set_waker ( acip_transport_t * transport,
void(* wake )(void *),
void * context )

Definition at line 314 of file quic/transport.c.

314 {
315 if (!transport || transport->methods != &quic_methods)
316 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport waker");
317 quic_transport_t *quic = transport->impl_data;
318 lane_lock(quic);
319 asciichat_error_t result = quic_transport_set_waker_on_lane(transport, wake, context);
320 lane_unlock(quic);
321 return result;
322}
asciichat_error_t quic_transport_set_waker_on_lane(acip_transport_t *transport, void(*wake)(void *), void *context)

References ERROR_INVALID_PARAM, acip_transport::impl_data, acip_transport::methods, quic_transport_set_waker_on_lane(), and SET_ERRNO.

◆ quic_transport_set_waker_on_lane()

asciichat_error_t quic_transport_set_waker_on_lane ( acip_transport_t * transport,
void(* wake )(void *),
void * context )

Definition at line 303 of file quic/transport.c.

303 {
304 if (!transport || transport->methods != &quic_methods)
305 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid QUIC transport waker");
306 quic_transport_t *quic = transport->impl_data;
307 if (!quic->connected)
308 return SET_ERRNO(ERROR_INVALID_STATE, "QUIC transport is closed");
309 quic->wake = wake;
310 quic->wake_context = wake ? context : NULL;
311 return ASCIICHAT_OK;
312}
@ ERROR_INVALID_STATE

References ASCIICHAT_OK, quic_transport_t::connected, ERROR_INVALID_PARAM, ERROR_INVALID_STATE, acip_transport::impl_data, acip_transport::methods, SET_ERRNO, quic_transport_t::wake, and quic_transport_t::wake_context.

Referenced by quic_transport_set_waker().