comparison src/event/ngx_event_quic_transport.c @ 7732: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
7731:d45325e90221 7732: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;