struct sockaddr *sockaddr, socklen_t socklen);
static void ngx_quic_set_packet_number(ngx_quic_header_t *pkt,
ngx_quic_send_ctx_t *ctx);
+static size_t ngx_quic_path_limit(ngx_connection_t *c, ngx_quic_path_t *path,
+ size_t size);
size_t
static ngx_int_t
ngx_quic_create_datagrams(ngx_connection_t *c, ngx_quic_socket_t *qsock)
{
- off_t max;
size_t len, min;
ssize_t n;
u_char *p;
len = ngx_min(qc->ctp.max_udp_payload_size,
NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
- if (path->limited) {
- max = path->received * 3;
- max = (path->sent >= max) ? 0 : max - path->sent;
-
- len = ngx_min(len, (size_t) max);
- }
+ len = ngx_quic_path_limit(c, path, len);
pad = ngx_quic_get_padding_level(c);
ngx_quic_frame_sendto(ngx_connection_t *c, ngx_quic_frame_t *frame,
size_t min, ngx_quic_path_t *path)
{
- off_t max;
size_t min_payload, pad;
ssize_t len, sent;
ngx_str_t res;
ngx_quic_init_packet(c, ctx, qc->socket, &pkt);
- /* account for anti-amplification limit: expand to allowed size */
- if (path->limited) {
- max = path->received * 3;
- max = (path->sent >= max) ? 0 : max - path->sent;
- if ((off_t) min > max) {
- min = max;
- }
- }
+ min = ngx_quic_path_limit(c, path, min);
min_payload = min ? ngx_quic_payload_size(&pkt, min) : 0;
return NGX_OK;
}
+
+
+static size_t
+ngx_quic_path_limit(ngx_connection_t *c, ngx_quic_path_t *path, size_t size)
+{
+ off_t max;
+
+ if (path->limited) {
+ max = path->received * 3;
+ max = (path->sent >= max) ? 0 : max - path->sent;
+
+ if ((off_t) size > max) {
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
+ "quic path limit %uz - %O", size, max);
+ return max;
+ }
+ }
+
+ return size;
+}