return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
return 1;
}
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (!depack_do_implicit_stream_create(ch, frame_data.stream_id,
OSSL_QUIC_FRAME_TYPE_RESET_STREAM,
&stream))
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (!depack_do_implicit_stream_create(ch, frame_data.stream_id,
OSSL_QUIC_FRAME_TYPE_STOP_SENDING,
&stream))
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
rstream = ch->crypto_recv[ackm_data->pkt_space];
if (!ossl_assert(rstream != NULL))
/*
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (token_len == 0) {
/*
* RFC 9000 s. 19.7: "A client MUST treat receipt of a NEW_TOKEN frame
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (!depack_do_implicit_stream_create(ch, frame_data.stream_id,
frame_type, &stream))
return 0; /* protocol error raised by above call */
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
ossl_quic_txfc_bump_cwm(&ch->conn_txfc, max_data);
ossl_quic_stream_map_visit(&ch->qsm, update_streams, ch);
return 1;
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (!depack_do_implicit_stream_create(ch, stream_id,
OSSL_QUIC_FRAME_TYPE_MAX_STREAM_DATA,
&stream))
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (max_streams > (((uint64_t)1) << 60)) {
ossl_quic_channel_raise_protocol_error(ch,
QUIC_ERR_FRAME_ENCODING_ERROR,
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
/* No-op - informative/debugging frame. */
return 1;
}
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
/*
* This is an informative/debugging frame, so we don't have to do anything,
* but it does trigger stream creation.
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
if (max_data > (((uint64_t)1) << 60)) {
/*
* RFC 9000 s. 19.14: "This value cannot exceed 2**60, as it is not
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
ossl_quic_channel_on_new_conn_id(ch, &frame_data);
return 1;
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
/* TODO(QUIC): Post MVP ADD CODE to send |seq_num| to the ch manager */
return 1;
}
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
/* TODO(QUIC): ADD CODE to send |frame_data| to the ch manager */
return 1;
return 0;
}
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
/* TODO(QUIC): ADD CODE to send |frame_data| to the ch manager */
return 1;
if (!ossl_quic_wire_decode_frame_handshake_done(pkt))
return 0;
- /* This frame makes the packet ACK eliciting */
- ackm_data->is_ack_eliciting = 1;
-
ossl_quic_channel_on_handshake_confirmed(ch);
return 1;
}
return 0;
}
+ /*
+ * There are only a few frame types which are not ACK-eliciting. Handle
+ * these centrally to make error handling cases more resilient, as we
+ * should tell the ACKM about an ACK-eliciting frame even if it was not
+ * successfully handled.
+ */
+ switch (frame_type) {
+ case OSSL_QUIC_FRAME_TYPE_PADDING:
+ case OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN:
+ case OSSL_QUIC_FRAME_TYPE_ACK_WITH_ECN:
+ case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT:
+ case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_APP:
+ break;
+ default:
+ ackm_data->is_ack_eliciting = 1;
+ break;
+ }
+
switch (frame_type) {
case OSSL_QUIC_FRAME_TYPE_PING:
/* Allowed in all packet types */
default:
/* Unknown frame type */
- ackm_data->is_ack_eliciting = 1;
ossl_quic_channel_raise_protocol_error(ch,
QUIC_ERR_FRAME_ENCODING_ERROR,
frame_type,