Lines Matching refs:demux

76     QUIC_DEMUX *demux;  in ossl_quic_demux_new()  local
78 demux = OPENSSL_zalloc(sizeof(QUIC_DEMUX)); in ossl_quic_demux_new()
79 if (demux == NULL) in ossl_quic_demux_new()
82 demux->net_bio = net_bio; in ossl_quic_demux_new()
83 demux->short_conn_id_len = short_conn_id_len; in ossl_quic_demux_new()
85 demux->mtu = DEMUX_DEFAULT_MTU; in ossl_quic_demux_new()
86 demux->now = now; in ossl_quic_demux_new()
87 demux->now_arg = now_arg; in ossl_quic_demux_new()
92 demux->use_local_addr = 1; in ossl_quic_demux_new()
94 return demux; in ossl_quic_demux_new()
108 void ossl_quic_demux_free(QUIC_DEMUX *demux) in ossl_quic_demux_free() argument
110 if (demux == NULL) in ossl_quic_demux_free()
114 demux_free_urxl(&demux->urx_free); in ossl_quic_demux_free()
115 demux_free_urxl(&demux->urx_pending); in ossl_quic_demux_free()
117 OPENSSL_free(demux); in ossl_quic_demux_free()
120 void ossl_quic_demux_set_bio(QUIC_DEMUX *demux, BIO *net_bio) in ossl_quic_demux_set_bio() argument
124 demux->net_bio = net_bio; in ossl_quic_demux_set_bio()
134 ossl_quic_demux_set_mtu(demux, mtu); /* best effort */ in ossl_quic_demux_set_bio()
138 int ossl_quic_demux_set_mtu(QUIC_DEMUX *demux, unsigned int mtu) in ossl_quic_demux_set_mtu() argument
143 demux->mtu = mtu; in ossl_quic_demux_set_mtu()
147 void ossl_quic_demux_set_default_handler(QUIC_DEMUX *demux, in ossl_quic_demux_set_default_handler() argument
151 demux->default_cb = cb; in ossl_quic_demux_set_default_handler()
152 demux->default_cb_arg = cb_arg; in ossl_quic_demux_set_default_handler()
172 static QUIC_URXE *demux_resize_urxe(QUIC_DEMUX *demux, QUIC_URXE *e, in demux_resize_urxe() argument
182 ossl_list_urxe_remove(&demux->urx_free, e); in demux_resize_urxe()
188 ossl_list_urxe_insert_head(&demux->urx_free, e); in demux_resize_urxe()
190 ossl_list_urxe_insert_after(&demux->urx_free, prev, e); in demux_resize_urxe()
196 ossl_list_urxe_insert_head(&demux->urx_free, e2); in demux_resize_urxe()
198 ossl_list_urxe_insert_after(&demux->urx_free, prev, e2); in demux_resize_urxe()
204 static QUIC_URXE *demux_reserve_urxe(QUIC_DEMUX *demux, QUIC_URXE *e, in demux_reserve_urxe() argument
207 return e->alloc_len < alloc_len ? demux_resize_urxe(demux, e, alloc_len) : e; in demux_reserve_urxe()
210 static int demux_ensure_free_urxe(QUIC_DEMUX *demux, size_t min_num_free) in demux_ensure_free_urxe() argument
214 while (ossl_list_urxe_num(&demux->urx_free) < min_num_free) { in demux_ensure_free_urxe()
215 e = demux_alloc_urxe(demux->mtu); in demux_ensure_free_urxe()
219 ossl_list_urxe_insert_tail(&demux->urx_free, e); in demux_ensure_free_urxe()
234 static int demux_recv(QUIC_DEMUX *demux) in demux_recv() argument
238 QUIC_URXE *urxe = ossl_list_urxe_head(&demux->urx_free), *unext; in demux_recv()
242 assert(ossl_list_urxe_head(&demux->urx_pending) == NULL); in demux_recv()
245 if (demux->net_bio == NULL) in demux_recv()
266 urxe = demux_reserve_urxe(demux, urxe, demux->mtu); in demux_recv()
277 if (demux->use_local_addr) in demux_recv()
284 if (!BIO_recvmmsg(demux->net_bio, msg, sizeof(BIO_MSG), i, 0, &rd)) { in demux_recv()
297 now = demux->now != NULL ? demux->now(demux->now_arg) : ossl_time_zero(); in demux_recv()
299 urxe = ossl_list_urxe_head(&demux->urx_free); in demux_recv()
306 urxe->datagram_id = demux->next_datagram_id++; in demux_recv()
308 ossl_list_urxe_remove(&demux->urx_free, urxe); in demux_recv()
309 ossl_list_urxe_insert_tail(&demux->urx_pending, urxe); in demux_recv()
317 static int demux_identify_conn_id(QUIC_DEMUX *demux, in demux_identify_conn_id() argument
323 demux->short_conn_id_len, in demux_identify_conn_id()
331 static int demux_process_pending_urxe(QUIC_DEMUX *demux, QUIC_URXE *e) in demux_process_pending_urxe() argument
337 if (!ossl_assert(e == ossl_list_urxe_head(&demux->urx_pending))) in demux_process_pending_urxe()
343 dst_conn_id_ok = demux_identify_conn_id(demux, e, &dst_conn_id); in demux_process_pending_urxe()
345 ossl_list_urxe_remove(&demux->urx_pending, e); in demux_process_pending_urxe()
346 if (demux->default_cb != NULL) { in demux_process_pending_urxe()
352 demux->default_cb(e, demux->default_cb_arg, in demux_process_pending_urxe()
356 ossl_list_urxe_insert_tail(&demux->urx_free, e); in demux_process_pending_urxe()
364 static int demux_process_pending_urxl(QUIC_DEMUX *demux) in demux_process_pending_urxl() argument
369 while ((e = ossl_list_urxe_head(&demux->urx_pending)) != NULL) in demux_process_pending_urxl()
370 if ((ret = demux_process_pending_urxe(demux, e)) <= 0) in demux_process_pending_urxl()
380 int ossl_quic_demux_pump(QUIC_DEMUX *demux) in ossl_quic_demux_pump() argument
384 if (ossl_list_urxe_head(&demux->urx_pending) == NULL) { in ossl_quic_demux_pump()
385 ret = demux_ensure_free_urxe(demux, DEMUX_MAX_MSGS_PER_CALL); in ossl_quic_demux_pump()
389 ret = demux_recv(demux); in ossl_quic_demux_pump()
396 assert(ossl_list_urxe_head(&demux->urx_pending) != NULL); in ossl_quic_demux_pump()
399 if ((ret = demux_process_pending_urxl(demux)) <= 0) in ossl_quic_demux_pump()
406 int ossl_quic_demux_inject(QUIC_DEMUX *demux, in ossl_quic_demux_inject() argument
415 ret = demux_ensure_free_urxe(demux, 1); in ossl_quic_demux_inject()
419 urxe = ossl_list_urxe_head(&demux->urx_free); in ossl_quic_demux_inject()
423 urxe = demux_reserve_urxe(demux, urxe, buf_len); in ossl_quic_demux_inject()
441 = demux->now != NULL ? demux->now(demux->now_arg) : ossl_time_zero(); in ossl_quic_demux_inject()
444 ossl_list_urxe_remove(&demux->urx_free, urxe); in ossl_quic_demux_inject()
445 ossl_list_urxe_insert_tail(&demux->urx_pending, urxe); in ossl_quic_demux_inject()
448 return demux_process_pending_urxl(demux) > 0; in ossl_quic_demux_inject()
452 void ossl_quic_demux_release_urxe(QUIC_DEMUX *demux, in ossl_quic_demux_release_urxe() argument
457 ossl_list_urxe_insert_tail(&demux->urx_free, e); in ossl_quic_demux_release_urxe()
461 void ossl_quic_demux_reinject_urxe(QUIC_DEMUX *demux, in ossl_quic_demux_reinject_urxe() argument
466 ossl_list_urxe_insert_head(&demux->urx_pending, e); in ossl_quic_demux_reinject_urxe()
470 int ossl_quic_demux_has_pending(const QUIC_DEMUX *demux) in ossl_quic_demux_has_pending() argument
472 return ossl_list_urxe_head(&demux->urx_pending) != NULL; in ossl_quic_demux_has_pending()