comparison src/event/ngx_event_quic.c @ 8001:2da9c4fddd44 quic

QUIC: eliminated connection handler argument in ngx_quic_run(). Now c->listening->handler() is called instead.
author Roman Arutyunyan <arut@nginx.com>
date Tue, 21 Jul 2020 23:08:23 +0300
parents 893b3313f53c
children d0ac4449a07f
comparison
equal deleted inserted replaced
8000:893b3313f53c 8001:2da9c4fddd44
34 34
35 35
36 typedef struct { 36 typedef struct {
37 ngx_rbtree_t tree; 37 ngx_rbtree_t tree;
38 ngx_rbtree_node_t sentinel; 38 ngx_rbtree_node_t sentinel;
39 ngx_connection_handler_pt handler;
40 39
41 ngx_uint_t id_counter; 40 ngx_uint_t id_counter;
42 41
43 uint64_t received; 42 uint64_t received;
44 uint64_t sent; 43 uint64_t sent;
160 static int ngx_quic_send_alert(ngx_ssl_conn_t *ssl_conn, 159 static int ngx_quic_send_alert(ngx_ssl_conn_t *ssl_conn,
161 enum ssl_encryption_level_t level, uint8_t alert); 160 enum ssl_encryption_level_t level, uint8_t alert);
162 161
163 162
164 static ngx_int_t ngx_quic_new_connection(ngx_connection_t *c, ngx_ssl_t *ssl, 163 static ngx_int_t ngx_quic_new_connection(ngx_connection_t *c, ngx_ssl_t *ssl,
165 ngx_quic_conf_t *conf, ngx_quic_header_t *pkt, 164 ngx_quic_conf_t *conf, ngx_quic_header_t *pkt);
166 ngx_connection_handler_pt handler);
167 static ngx_int_t ngx_quic_new_dcid(ngx_connection_t *c, ngx_str_t *odcid); 165 static ngx_int_t ngx_quic_new_dcid(ngx_connection_t *c, ngx_str_t *odcid);
168 static ngx_int_t ngx_quic_retry(ngx_connection_t *c); 166 static ngx_int_t ngx_quic_retry(ngx_connection_t *c);
169 static ngx_int_t ngx_quic_new_token(ngx_connection_t *c, ngx_str_t *token); 167 static ngx_int_t ngx_quic_new_token(ngx_connection_t *c, ngx_str_t *token);
170 static ngx_int_t ngx_quic_validate_token(ngx_connection_t *c, 168 static ngx_int_t ngx_quic_validate_token(ngx_connection_t *c,
171 ngx_quic_header_t *pkt); 169 ngx_quic_header_t *pkt);
585 return 1; 583 return 1;
586 } 584 }
587 585
588 586
589 void 587 void
590 ngx_quic_run(ngx_connection_t *c, ngx_ssl_t *ssl, ngx_quic_conf_t *conf, 588 ngx_quic_run(ngx_connection_t *c, ngx_ssl_t *ssl, ngx_quic_conf_t *conf)
591 ngx_connection_handler_pt handler)
592 { 589 {
593 ngx_buf_t *b; 590 ngx_buf_t *b;
594 ngx_quic_header_t pkt; 591 ngx_quic_header_t pkt;
595 592
596 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic run"); 593 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic run");
604 pkt.log = c->log; 601 pkt.log = c->log;
605 pkt.raw = b; 602 pkt.raw = b;
606 pkt.data = b->start; 603 pkt.data = b->start;
607 pkt.len = b->last - b->start; 604 pkt.len = b->last - b->start;
608 605
609 if (ngx_quic_new_connection(c, ssl, conf, &pkt, handler) != NGX_OK) { 606 if (ngx_quic_new_connection(c, ssl, conf, &pkt) != NGX_OK) {
610 ngx_quic_close_connection(c, NGX_ERROR); 607 ngx_quic_close_connection(c, NGX_ERROR);
611 return; 608 return;
612 } 609 }
613 610
614 ngx_add_timer(c->read, c->quic->in_retry ? NGX_QUIC_RETRY_TIMEOUT 611 ngx_add_timer(c->read, c->quic->in_retry ? NGX_QUIC_RETRY_TIMEOUT
620 } 617 }
621 618
622 619
623 static ngx_int_t 620 static ngx_int_t
624 ngx_quic_new_connection(ngx_connection_t *c, ngx_ssl_t *ssl, 621 ngx_quic_new_connection(ngx_connection_t *c, ngx_ssl_t *ssl,
625 ngx_quic_conf_t *conf, ngx_quic_header_t *pkt, 622 ngx_quic_conf_t *conf, ngx_quic_header_t *pkt)
626 ngx_connection_handler_pt handler)
627 { 623 {
628 ngx_int_t rc; 624 ngx_int_t rc;
629 ngx_uint_t i; 625 ngx_uint_t i;
630 ngx_quic_tp_t *ctp; 626 ngx_quic_tp_t *ctp;
631 ngx_quic_secrets_t *keys; 627 ngx_quic_secrets_t *keys;
706 702
707 c->quic = qc; 703 c->quic = qc;
708 qc->ssl = ssl; 704 qc->ssl = ssl;
709 qc->conf = conf; 705 qc->conf = conf;
710 qc->tp = conf->tp; 706 qc->tp = conf->tp;
711 qc->streams.handler = handler;
712 707
713 ctp = &qc->ctp; 708 ctp = &qc->ctp;
714 ctp->max_udp_payload_size = ngx_quic_max_udp_payload(c); 709 ctp->max_udp_payload_size = ngx_quic_max_udp_payload(c);
715 ctp->ack_delay_exponent = NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT; 710 ctp->ack_delay_exponent = NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT;
716 ctp->max_ack_delay = NGX_QUIC_DEFAULT_MAX_ACK_DELAY; 711 ctp->max_ack_delay = NGX_QUIC_DEFAULT_MAX_ACK_DELAY;
2947 2942
2948 if ((f->stream_id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0) { 2943 if ((f->stream_id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0) {
2949 ngx_quic_handle_max_streams(c); 2944 ngx_quic_handle_max_streams(c);
2950 } 2945 }
2951 2946
2952 qc->streams.handler(sn->c); 2947 sn->c->listening->handler(sn->c);
2953 2948
2954 if (f->offset == 0) { 2949 if (f->offset == 0) {
2955 return NGX_OK; 2950 return NGX_OK;
2956 } 2951 }
2957 2952