return NGX_OK;
}
+ if (qs->recv_final_size != (uint64_t) -1
+ && (qs->recv_final_size < last
+ || (qs->recv_final_size > last && f->fin)))
+ {
+ qc->error = NGX_QUIC_ERR_FINAL_SIZE_ERROR;
+ return NGX_ERROR;
+ }
+
+ if (qs->recv_last > last && f->fin) {
+ qc->error = NGX_QUIC_ERR_FINAL_SIZE_ERROR;
+ return NGX_ERROR;
+ }
+
if (qs->recv_state != NGX_QUIC_STREAM_RECV_RECV
&& qs->recv_state != NGX_QUIC_STREAM_RECV_SIZE_KNOWN)
{
return NGX_ERROR;
}
- if (qs->recv_final_size != (uint64_t) -1 && last > qs->recv_final_size) {
- qc->error = NGX_QUIC_ERR_FINAL_SIZE_ERROR;
- return NGX_ERROR;
- }
-
if (last < qs->recv_offset) {
return NGX_OK;
}
if (f->fin) {
- if (qs->recv_final_size != (uint64_t) -1 && qs->recv_final_size != last)
- {
- qc->error = NGX_QUIC_ERR_FINAL_SIZE_ERROR;
- return NGX_ERROR;
- }
-
- if (qs->recv_last > last) {
- qc->error = NGX_QUIC_ERR_FINAL_SIZE_ERROR;
- return NGX_ERROR;
- }
-
qs->recv_final_size = last;
qs->recv_state = NGX_QUIC_STREAM_RECV_SIZE_KNOWN;
}
return NGX_OK;
}
- if (qs->recv_state == NGX_QUIC_STREAM_RECV_RESET_RECVD
- || qs->recv_state == NGX_QUIC_STREAM_RECV_RESET_READ)
- {
- return NGX_OK;
- }
-
- if (ngx_quic_control_flow(qs, f->final_size) != NGX_OK) {
- return NGX_ERROR;
- }
-
if (qs->recv_final_size != (uint64_t) -1
&& qs->recv_final_size != f->final_size)
{
return NGX_ERROR;
}
+ if (qs->recv_state == NGX_QUIC_STREAM_RECV_RESET_RECVD
+ || qs->recv_state == NGX_QUIC_STREAM_RECV_RESET_READ)
+ {
+ return NGX_OK;
+ }
+
+ if (ngx_quic_control_flow(qs, f->final_size) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
qs->recv_final_size = f->final_size;
qs->recv_state = NGX_QUIC_STREAM_RECV_RESET_RECVD;