comparison src/event/ngx_event_quic.c @ 8154:96798101c3aa quic

QUIC: expand UDP datagrams with an ack-eliciting Initial packet. Per draft-ietf-quic-transport-32 on the topic: : Similarly, a server MUST expand the payload of all UDP datagrams carrying : ack-eliciting Initial packets to at least the smallest allowed maximum : datagram size of 1200 bytes.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 21 Oct 2020 12:46:23 +0100
parents f948945c1a1c
children 38c7dd720774
comparison
equal deleted inserted replaced
8153:ee06a813756c 8154:96798101c3aa
3846 static ngx_int_t 3846 static ngx_int_t
3847 ngx_quic_send_frames(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, 3847 ngx_quic_send_frames(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx,
3848 ngx_queue_t *frames) 3848 ngx_queue_t *frames)
3849 { 3849 {
3850 u_char *p; 3850 u_char *p;
3851 size_t pad_len;
3851 ssize_t len; 3852 ssize_t len;
3852 ngx_str_t out, res; 3853 ngx_str_t out, res;
3853 ngx_msec_t now; 3854 ngx_msec_t now;
3854 ngx_queue_t *q; 3855 ngx_queue_t *q;
3855 ngx_ssl_conn_t *ssl_conn; 3856 ngx_ssl_conn_t *ssl_conn;
3900 f->plen = 0; 3901 f->plen = 0;
3901 } 3902 }
3902 3903
3903 out.len = p - out.data; 3904 out.len = p - out.data;
3904 3905
3905 while (out.len < 4) {
3906 *p++ = NGX_QUIC_FT_PADDING;
3907 out.len++;
3908 }
3909
3910 qc = c->quic; 3906 qc = c->quic;
3911 3907
3912 keys = &c->quic->keys[start->level]; 3908 keys = &c->quic->keys[start->level];
3913 3909
3914 pkt.secret = &keys->server; 3910 pkt.secret = &keys->server;
3931 3927
3932 pkt.log = c->log; 3928 pkt.log = c->log;
3933 pkt.level = start->level; 3929 pkt.level = start->level;
3934 pkt.dcid = qc->scid; 3930 pkt.dcid = qc->scid;
3935 pkt.scid = qc->dcid; 3931 pkt.scid = qc->dcid;
3932
3933 if (start->level == ssl_encryption_initial && pkt.need_ack) {
3934 pad_len = NGX_QUIC_MIN_INITIAL_SIZE - EVP_GCM_TLS_TAG_LEN
3935 - ngx_quic_create_long_header(&pkt, NULL, out.len, NULL);
3936 pad_len = ngx_min(pad_len, NGX_QUIC_MIN_INITIAL_SIZE);
3937
3938 } else {
3939 pad_len = 4;
3940 }
3941
3942 if (out.len < pad_len) {
3943 ngx_memset(p, NGX_QUIC_FT_PADDING, pad_len - out.len);
3944 out.len = pad_len;
3945 }
3946
3936 pkt.payload = out; 3947 pkt.payload = out;
3937 3948
3938 res.data = dst; 3949 res.data = dst;
3939 3950
3940 ngx_log_debug6(NGX_LOG_DEBUG_EVENT, c->log, 0, 3951 ngx_log_debug6(NGX_LOG_DEBUG_EVENT, c->log, 0,