Mercurial > hg > nginx
comparison src/event/ngx_event_quic_transport.c @ 8266:f92e583fc256 quic
Better flow control and buffering for QUIC streams.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 23 Mar 2020 15:49:31 +0300 |
parents | c58bbe31e87d |
children | 159eb325ec82 |
comparison
equal
deleted
inserted
replaced
8265:d45325e90221 | 8266:f92e583fc256 |
---|---|
67 static size_t ngx_quic_create_crypto(u_char *p, | 67 static size_t ngx_quic_create_crypto(u_char *p, |
68 ngx_quic_crypto_frame_t *crypto); | 68 ngx_quic_crypto_frame_t *crypto); |
69 static size_t ngx_quic_create_stream(u_char *p, ngx_quic_stream_frame_t *sf); | 69 static size_t ngx_quic_create_stream(u_char *p, ngx_quic_stream_frame_t *sf); |
70 static size_t ngx_quic_create_max_streams(u_char *p, | 70 static size_t ngx_quic_create_max_streams(u_char *p, |
71 ngx_quic_max_streams_frame_t *ms); | 71 ngx_quic_max_streams_frame_t *ms); |
72 static size_t ngx_quic_create_max_stream_data(u_char *p, | |
73 ngx_quic_max_stream_data_frame_t *ms); | |
72 static size_t ngx_quic_create_close(u_char *p, ngx_quic_close_frame_t *cl); | 74 static size_t ngx_quic_create_close(u_char *p, ngx_quic_close_frame_t *cl); |
73 | 75 |
74 static ngx_int_t ngx_quic_parse_transport_param(u_char *p, u_char *end, | 76 static ngx_int_t ngx_quic_parse_transport_param(u_char *p, u_char *end, |
75 uint16_t id, ngx_quic_tp_t *dst); | 77 uint16_t id, ngx_quic_tp_t *dst); |
76 | 78 |
1077 return ngx_quic_create_close(p, &f->u.close); | 1079 return ngx_quic_create_close(p, &f->u.close); |
1078 | 1080 |
1079 case NGX_QUIC_FT_MAX_STREAMS: | 1081 case NGX_QUIC_FT_MAX_STREAMS: |
1080 return ngx_quic_create_max_streams(p, &f->u.max_streams); | 1082 return ngx_quic_create_max_streams(p, &f->u.max_streams); |
1081 | 1083 |
1084 case NGX_QUIC_FT_MAX_STREAM_DATA: | |
1085 return ngx_quic_create_max_stream_data(p, &f->u.max_stream_data); | |
1086 | |
1082 default: | 1087 default: |
1083 /* BUG: unsupported frame type generated */ | 1088 /* BUG: unsupported frame type generated */ |
1084 return NGX_ERROR; | 1089 return NGX_ERROR; |
1085 } | 1090 } |
1086 } | 1091 } |
1457 | 1462 |
1458 return NGX_OK; | 1463 return NGX_OK; |
1459 } | 1464 } |
1460 | 1465 |
1461 | 1466 |
1467 static size_t | |
1468 ngx_quic_create_max_stream_data(u_char *p, ngx_quic_max_stream_data_frame_t *ms) | |
1469 { | |
1470 size_t len; | |
1471 u_char *start; | |
1472 | |
1473 if (p == NULL) { | |
1474 len = ngx_quic_varint_len(NGX_QUIC_FT_MAX_STREAM_DATA); | |
1475 len += ngx_quic_varint_len(ms->id); | |
1476 len += ngx_quic_varint_len(ms->limit); | |
1477 return len; | |
1478 } | |
1479 | |
1480 start = p; | |
1481 | |
1482 ngx_quic_build_int(&p, NGX_QUIC_FT_MAX_STREAM_DATA); | |
1483 ngx_quic_build_int(&p, ms->id); | |
1484 ngx_quic_build_int(&p, ms->limit); | |
1485 | |
1486 return p - start; | |
1487 } | |
1488 | |
1489 | |
1462 ssize_t | 1490 ssize_t |
1463 ngx_quic_create_transport_params(u_char *pos, u_char *end, ngx_quic_tp_t *tp) | 1491 ngx_quic_create_transport_params(u_char *pos, u_char *end, ngx_quic_tp_t *tp) |
1464 { | 1492 { |
1465 u_char *p; | 1493 u_char *p; |
1466 size_t len; | 1494 size_t len; |