Lines Matching refs:doq_socket

1326 	if(c->doq_socket->have_blocked_pkt)
1329 if(sldns_buffer_limit(c->doq_socket->pkt_buf) >
1330 sldns_buffer_capacity(c->doq_socket->blocked_pkt))
1333 c->doq_socket->have_blocked_pkt = 1;
1334 c->doq_socket->blocked_pkt_pi.ecn = ecn;
1335 memcpy(c->doq_socket->blocked_paddr, paddr,
1336 sizeof(*c->doq_socket->blocked_paddr));
1337 sldns_buffer_clear(c->doq_socket->blocked_pkt);
1338 sldns_buffer_write(c->doq_socket->blocked_pkt,
1339 sldns_buffer_begin(c->doq_socket->pkt_buf),
1340 sldns_buffer_limit(c->doq_socket->pkt_buf));
1341 sldns_buffer_flip(c->doq_socket->blocked_pkt);
1354 iov[0].iov_base = sldns_buffer_begin(c->doq_socket->pkt_buf);
1355 iov[0].iov_len = sldns_buffer_limit(c->doq_socket->pkt_buf);
1410 } else if(ret != (ssize_t)sldns_buffer_limit(c->doq_socket->pkt_buf)) {
1417 (int)sldns_buffer_limit(c->doq_socket->pkt_buf));
1421 (int)ret, (int)sldns_buffer_limit(c->doq_socket->pkt_buf));
1573 iov[0].iov_base = sldns_buffer_begin(c->doq_socket->pkt_buf);
1574 iov[0].iov_len = sldns_buffer_remaining(c->doq_socket->pkt_buf);
1594 sldns_buffer_skip(c->doq_socket->pkt_buf, rcv);
1595 sldns_buffer_flip(c->doq_socket->pkt_buf);
1617 unused_random = ub_random_max(c->doq_socket->rnd, 256);
1618 sldns_buffer_clear(c->doq_socket->pkt_buf);
1620 sldns_buffer_begin(c->doq_socket->pkt_buf),
1621 sldns_buffer_capacity(c->doq_socket->pkt_buf), unused_random,
1628 sldns_buffer_set_position(c->doq_socket->pkt_buf, ret);
1629 sldns_buffer_flip(c->doq_socket->pkt_buf);
1745 sldns_buffer_begin(c->doq_socket->pkt_buf),
1746 sldns_buffer_limit(c->doq_socket->pkt_buf),
1747 c->doq_socket->sv_scidlen);
1750 &scid, &scidlen, sldns_buffer_begin(c->doq_socket->pkt_buf),
1751 sldns_buffer_limit(c->doq_socket->pkt_buf), c->doq_socket->sv_scidlen);
1794 *conn = doq_conn_find_by_addr_or_cid(c->doq_socket->table, paddr,
1802 (*conn)->doq_socket = c->doq_socket;
1836 scid.datalen = c->doq_socket->sv_scidlen;
1837 doq_cid_randfill(&scid, scid.datalen, c->doq_socket->rnd);
1842 c->doq_socket->static_secret, c->doq_socket->static_secret_len,
1851 sldns_buffer_clear(c->doq_socket->pkt_buf);
1852 ret = ngtcp2_crypto_write_retry(sldns_buffer_begin(c->doq_socket->pkt_buf),
1853 sldns_buffer_capacity(c->doq_socket->pkt_buf), hd->version,
1860 sldns_buffer_set_position(c->doq_socket->pkt_buf, ret);
1861 sldns_buffer_flip(c->doq_socket->pkt_buf);
1872 sldns_buffer_clear(c->doq_socket->pkt_buf);
1874 sldns_buffer_begin(c->doq_socket->pkt_buf),
1875 sldns_buffer_capacity(c->doq_socket->pkt_buf), hd->version, &hd->scid,
1882 sldns_buffer_set_position(c->doq_socket->pkt_buf, ret);
1883 sldns_buffer_flip(c->doq_socket->pkt_buf);
1908 c->doq_socket->static_secret,
1909 c->doq_socket->static_secret_len, hd->version,
1940 c->doq_socket->static_secret, c->doq_socket->static_secret_len,
1971 lock_rw_wrlock(&c->doq_socket->table->lock);
1972 node = rbtree_delete(c->doq_socket->table->conn_tree, copy.node.key);
1976 doq_conn_write_list_remove(c->doq_socket->table, conn);
1982 doq_timer_list_remove(c->doq_socket->table,
1986 doq_timer_tree_remove(c->doq_socket->table,
1989 lock_rw_unlock(&c->doq_socket->table->lock);
1992 doq_table_quic_size_subtract(c->doq_socket->table,
1994 doq_conn_delete(conn, c->doq_socket->table);
2006 if(!doq_table_quic_size_available(c->doq_socket->table,
2007 c->doq_socket->cfg, sizeof(*conn)+hd->dcid.datalen
2022 lock_rw_wrlock(&c->doq_socket->table->lock);
2024 if(!rbtree_insert(c->doq_socket->table->conn_tree, &conn->node)) {
2025 lock_rw_unlock(&c->doq_socket->table->lock);
2029 doq_conn_delete(conn, c->doq_socket->table);
2032 lock_rw_unlock(&c->doq_socket->table->lock);
2033 doq_table_quic_size_add(c->doq_socket->table,
2103 if(c->doq_socket->validate_addr) {
2128 rv = ngtcp2_accept(&hd, sldns_buffer_begin(c->doq_socket->pkt_buf),
2129 sldns_buffer_limit(c->doq_socket->pkt_buf));
2139 if(c->doq_socket->validate_addr ||
2152 (*conn)->doq_socket = c->doq_socket;
2172 lock_rw_wrlock(&c->doq_socket->table->lock);
2173 RBTREE_FOR(t, struct doq_timer*, c->doq_socket->table->timer_tree) {
2175 t->worker_doq_socket == c->doq_socket) {
2177 t->worker_doq_socket = c->doq_socket;
2183 lock_rw_unlock(&c->doq_socket->table->lock);
2187 timeval_subtract(&rel, &tv, c->doq_socket->now_tv);
2188 comm_timer_set(c->doq_socket->timer, &rel);
2189 memcpy(&c->doq_socket->marked_time, &tv,
2190 sizeof(c->doq_socket->marked_time));
2195 if(comm_timer_is_set(c->doq_socket->timer))
2196 comm_timer_disable(c->doq_socket->timer);
2197 memset(&c->doq_socket->marked_time, 0,
2198 sizeof(c->doq_socket->marked_time));
2213 /* No longer in callbacks, so the pointer to doq_socket is back
2215 conn->doq_socket = NULL;
2239 lock_rw_wrlock(&c->doq_socket->table->lock);
2240 node = rbtree_search(c->doq_socket->table->conn_tree, copy.node.key);
2242 lock_rw_unlock(&c->doq_socket->table->lock);
2250 lock_rw_unlock(&c->doq_socket->table->lock);
2259 doq_conn_set_write_list(c->doq_socket->table, conn);
2262 doq_timer_set(c->doq_socket->table, &conn->timer,
2263 c->doq_socket, &new_tv);
2265 lock_rw_unlock(&c->doq_socket->table->lock);
2277 /* no longer in callbacks, so the pointer to doq_socket is back
2279 conn->doq_socket = NULL;
2298 lock_rw_wrlock(&c->doq_socket->table->lock);
2299 node = rbtree_search(c->doq_socket->table->conn_tree, copy.node.key);
2301 lock_rw_unlock(&c->doq_socket->table->lock);
2309 lock_rw_unlock(&c->doq_socket->table->lock);
2317 doq_conn_set_write_list(c->doq_socket->table, conn);
2318 lock_rw_unlock(&c->doq_socket->table->lock);
2328 lock_rw_rdlock(&c->doq_socket->table->lock);
2329 conn = c->doq_socket->table->write_list_first;
2334 lock_rw_unlock(&c->doq_socket->table->lock);
2343 lock_rw_wrlock(&c->doq_socket->table->lock);
2344 conn = doq_table_pop_first(c->doq_socket->table);
2347 conn = doq_table_pop_first(c->doq_socket->table);
2349 lock_rw_unlock(&c->doq_socket->table->lock);
2351 conn->doq_socket = c->doq_socket;
2372 if(c->doq_socket->have_blocked_pkt)
2374 lock_rw_rdlock(&c->doq_socket->table->lock);
2375 if(c->doq_socket->table->write_list_first)
2377 lock_rw_unlock(&c->doq_socket->table->lock);
2386 if(c->doq_socket->event_has_write)
2389 c->doq_socket->event_has_write = 1;
2397 if(!c->doq_socket->event_has_write)
2400 c->doq_socket->event_has_write = 0;
2408 if(!c->doq_socket->have_blocked_pkt)
2410 c->doq_socket->have_blocked_pkt = 0;
2411 if(sldns_buffer_limit(c->doq_socket->blocked_pkt) >
2412 sldns_buffer_remaining(c->doq_socket->pkt_buf))
2415 sldns_buffer_clear(c->doq_socket->pkt_buf);
2416 sldns_buffer_write(c->doq_socket->pkt_buf,
2417 sldns_buffer_begin(c->doq_socket->blocked_pkt),
2418 sldns_buffer_limit(c->doq_socket->blocked_pkt));
2419 sldns_buffer_flip(c->doq_socket->pkt_buf);
2420 memcpy(&paddr, c->doq_socket->blocked_paddr, sizeof(paddr));
2421 doq_send_pkt(c, &paddr, c->doq_socket->blocked_pkt_pi.ecn);
2422 if(c->doq_socket->have_blocked_pkt)
2429 doq_timer_timeout_conn(struct doq_server_socket* doq_socket)
2433 lock_rw_wrlock(&doq_socket->table->lock);
2434 node = rbtree_first(doq_socket->table->timer_tree);
2440 if(timeval_smaller(doq_socket->now_tv, &t->time)) {
2441 lock_rw_unlock(&doq_socket->table->lock);
2446 conn->doq_socket = doq_socket;
2449 doq_timer_unset(doq_socket->table, t);
2450 lock_rw_unlock(&doq_socket->table->lock);
2453 lock_rw_unlock(&doq_socket->table->lock);
2459 doq_timer_erase_marker(struct doq_server_socket* doq_socket)
2462 lock_rw_wrlock(&doq_socket->table->lock);
2463 t = doq_timer_find_time(doq_socket->table, &doq_socket->marked_time);
2464 if(t && t->worker_doq_socket == doq_socket)
2466 lock_rw_unlock(&doq_socket->table->lock);
2467 memset(&doq_socket->marked_time, 0, sizeof(doq_socket->marked_time));
2473 struct doq_server_socket* doq_socket = (struct doq_server_socket*)arg;
2477 doq_timer_erase_marker(doq_socket);
2479 while((conn = doq_timer_timeout_conn(doq_socket)) != NULL) {
2500 doq_delete_connection(doq_socket->cp, conn);
2504 doq_delete_connection(doq_socket->cp, conn);
2505 else doq_done_setup_timer_and_write(doq_socket->cp, conn);
2508 if(doq_socket_want_write(doq_socket->cp))
2509 doq_socket_write_enable(doq_socket->cp);
2510 else doq_socket_write_disable(doq_socket->cp);
2511 doq_pickup_timer(doq_socket->cp);
2527 log_assert(c && c->doq_socket->pkt_buf && c->fd == fd);
2535 if(c->doq_socket->have_blocked_pkt) {
2540 if(!c->doq_socket->event_has_write)
2563 conn->doq_socket = NULL;
2565 if(c->doq_socket->have_blocked_pkt) {
2566 if(!c->doq_socket->event_has_write)
2587 if(c->doq_socket->have_blocked_pkt) {
2588 if(!c->doq_socket->event_has_write)
2608 if(c->doq_socket->have_blocked_pkt) {
2609 if(!c->doq_socket->event_has_write)
2614 sldns_buffer_clear(c->doq_socket->pkt_buf);
2617 log_assert(sldns_buffer_remaining(c->doq_socket->pkt_buf) > 0);
2639 (int)sldns_buffer_limit(c->doq_socket->pkt_buf),
2643 if(sldns_buffer_limit(c->doq_socket->pkt_buf) == 0)
2720 struct doq_server_socket* doq_socket;
2721 doq_socket = calloc(1, sizeof(*doq_socket));
2722 if(!doq_socket) {
2725 doq_socket->table = table;
2726 doq_socket->rnd = rnd;
2727 doq_socket->validate_addr = 1;
2728 /* the doq_socket has its own copy of the static secret, as
2730 doq_socket->static_secret_len = table->static_secret_len;
2731 doq_socket->static_secret = memdup(table->static_secret,
2733 if(!doq_socket->static_secret) {
2734 free(doq_socket);
2737 doq_socket->ctx = (SSL_CTX*)quic_sslctx;
2738 doq_socket->idle_timeout = table->idle_timeout;
2739 doq_socket->sv_scidlen = table->sv_scidlen;
2740 doq_socket->cp = c;
2741 doq_socket->pkt_buf = sldns_buffer_new(doq_buffer_size);
2742 if(!doq_socket->pkt_buf) {
2743 free(doq_socket->static_secret);
2744 free(doq_socket);
2747 doq_socket->blocked_pkt = sldns_buffer_new(
2748 sldns_buffer_capacity(doq_socket->pkt_buf));
2749 if(!doq_socket->pkt_buf) {
2750 free(doq_socket->static_secret);
2751 sldns_buffer_free(doq_socket->pkt_buf);
2752 free(doq_socket);
2755 doq_socket->blocked_paddr = calloc(1,
2756 sizeof(*doq_socket->blocked_paddr));
2757 if(!doq_socket->blocked_paddr) {
2758 free(doq_socket->static_secret);
2759 sldns_buffer_free(doq_socket->pkt_buf);
2760 sldns_buffer_free(doq_socket->blocked_pkt);
2761 free(doq_socket);
2764 doq_socket->timer = comm_timer_create(base, doq_timer_cb, doq_socket);
2765 if(!doq_socket->timer) {
2766 free(doq_socket->static_secret);
2767 sldns_buffer_free(doq_socket->pkt_buf);
2768 sldns_buffer_free(doq_socket->blocked_pkt);
2769 free(doq_socket->blocked_paddr);
2770 free(doq_socket);
2773 memset(&doq_socket->marked_time, 0, sizeof(doq_socket->marked_time));
2774 comm_base_timept(base, &doq_socket->now_tt, &doq_socket->now_tv);
2775 doq_socket->cfg = cfg;
2776 return doq_socket;
2781 doq_server_socket_delete(struct doq_server_socket* doq_socket)
2783 if(!doq_socket)
2785 free(doq_socket->static_secret);
2787 free(doq_socket->quic_method);
2789 sldns_buffer_free(doq_socket->pkt_buf);
2790 sldns_buffer_free(doq_socket->blocked_pkt);
2791 free(doq_socket->blocked_paddr);
2792 comm_timer_delete(doq_socket->timer);
2793 free(doq_socket);
2822 log_assert(c->doq_socket);
2823 if(c->doq_socket->current_conn) {
2824 *conn = c->doq_socket->current_conn;
2826 *conn = doq_lookup_repinfo(c->doq_socket->table, repinfo);
2832 (*conn)->doq_socket = c->doq_socket;
2841 if(!c->doq_socket->current_conn) {
2850 if(!c->doq_socket->current_conn) {
2876 if(!repinfo->c->doq_socket->current_conn) {
2905 if(!repinfo->c->doq_socket->current_conn) {
5889 c->doq_socket = doq_server_socket_create(table, rnd, quic_sslctx, c,
5891 if(!c->doq_socket) {
6603 if(c->doq_socket)
6604 doq_server_socket_delete(c->doq_socket);
6665 repinfo->c->doq_socket
6703 } else if(repinfo->c->doq_socket) {
6734 } else if(repinfo->c->doq_socket) {