Mercurial > hg > nginx
comparison src/event/quic/ngx_event_quic_transport.c @ 8703:d710c457171c quic
QUIC: added ability to reset a stream.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 17 Feb 2021 14:25:07 +0300 |
parents | d4e02b3b734f |
children | 81bb3a690c10 |
comparison
equal
deleted
inserted
replaced
8702:d4e02b3b734f | 8703:d710c457171c |
---|---|
94 static ngx_int_t ngx_quic_frame_allowed(ngx_quic_header_t *pkt, | 94 static ngx_int_t ngx_quic_frame_allowed(ngx_quic_header_t *pkt, |
95 ngx_uint_t frame_type); | 95 ngx_uint_t frame_type); |
96 static size_t ngx_quic_create_ping(u_char *p); | 96 static size_t ngx_quic_create_ping(u_char *p); |
97 static size_t ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack, | 97 static size_t ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack, |
98 ngx_chain_t *ranges); | 98 ngx_chain_t *ranges); |
99 static size_t ngx_quic_create_reset_stream(u_char *p, | |
100 ngx_quic_reset_stream_frame_t *rs); | |
99 static size_t ngx_quic_create_stop_sending(u_char *p, | 101 static size_t ngx_quic_create_stop_sending(u_char *p, |
100 ngx_quic_stop_sending_frame_t *ss); | 102 ngx_quic_stop_sending_frame_t *ss); |
101 static size_t ngx_quic_create_crypto(u_char *p, | 103 static size_t ngx_quic_create_crypto(u_char *p, |
102 ngx_quic_crypto_frame_t *crypto, ngx_chain_t *data); | 104 ngx_quic_crypto_frame_t *crypto, ngx_chain_t *data); |
103 static size_t ngx_quic_create_hs_done(u_char *p); | 105 static size_t ngx_quic_create_hs_done(u_char *p); |
1226 | 1228 |
1227 case NGX_QUIC_FT_ACK: | 1229 case NGX_QUIC_FT_ACK: |
1228 f->need_ack = 0; | 1230 f->need_ack = 0; |
1229 return ngx_quic_create_ack(p, &f->u.ack, f->data); | 1231 return ngx_quic_create_ack(p, &f->u.ack, f->data); |
1230 | 1232 |
1233 case NGX_QUIC_FT_RESET_STREAM: | |
1234 return ngx_quic_create_reset_stream(p, &f->u.reset_stream); | |
1235 | |
1231 case NGX_QUIC_FT_STOP_SENDING: | 1236 case NGX_QUIC_FT_STOP_SENDING: |
1232 return ngx_quic_create_stop_sending(p, &f->u.stop_sending); | 1237 return ngx_quic_create_stop_sending(p, &f->u.stop_sending); |
1233 | 1238 |
1234 case NGX_QUIC_FT_CRYPTO: | 1239 case NGX_QUIC_FT_CRYPTO: |
1235 return ngx_quic_create_crypto(p, &f->u.crypto, f->data); | 1240 return ngx_quic_create_crypto(p, &f->u.crypto, f->data); |
1326 while (ranges) { | 1331 while (ranges) { |
1327 b = ranges->buf; | 1332 b = ranges->buf; |
1328 p = ngx_cpymem(p, b->pos, b->last - b->pos); | 1333 p = ngx_cpymem(p, b->pos, b->last - b->pos); |
1329 ranges = ranges->next; | 1334 ranges = ranges->next; |
1330 } | 1335 } |
1336 | |
1337 return p - start; | |
1338 } | |
1339 | |
1340 | |
1341 static size_t | |
1342 ngx_quic_create_reset_stream(u_char *p, ngx_quic_reset_stream_frame_t *rs) | |
1343 { | |
1344 size_t len; | |
1345 u_char *start; | |
1346 | |
1347 if (p == NULL) { | |
1348 len = ngx_quic_varint_len(NGX_QUIC_FT_RESET_STREAM); | |
1349 len += ngx_quic_varint_len(rs->id); | |
1350 len += ngx_quic_varint_len(rs->error_code); | |
1351 len += ngx_quic_varint_len(rs->final_size); | |
1352 return len; | |
1353 } | |
1354 | |
1355 start = p; | |
1356 | |
1357 ngx_quic_build_int(&p, NGX_QUIC_FT_RESET_STREAM); | |
1358 ngx_quic_build_int(&p, rs->id); | |
1359 ngx_quic_build_int(&p, rs->error_code); | |
1360 ngx_quic_build_int(&p, rs->final_size); | |
1331 | 1361 |
1332 return p - start; | 1362 return p - start; |
1333 } | 1363 } |
1334 | 1364 |
1335 | 1365 |