Mercurial > hg > nginx-quic
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, |