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