@@ -86,16 +86,20 @@ QUICParser::parseHandshake(std::span<const std::byte> payload) noexcept
8686std::optional<std::size_t > QUICParser::parseInitial (
8787 std::span<const std::byte> payload,
8888 std::span<const uint8_t > currentDCID,
89- std::span< const uint8_t > initialDCID,
89+ const std::optional<ConnectionId>& initialDCID,
9090 const std::byte headerForm,
9191 std::span<const std::byte> salt,
9292 const QUICVersion version) noexcept
9393{
9494 initialHeaderView
9595 = QUICInitialHeaderView::createFrom (payload, headerForm, salt, currentDCID, version);
96- if (!initialHeaderView.has_value ()) {
97- initialHeaderView
98- = QUICInitialHeaderView::createFrom (payload, headerForm, salt, initialDCID, version);
96+ if (!initialHeaderView.has_value () && initialDCID.has_value ()) {
97+ initialHeaderView = QUICInitialHeaderView::createFrom (
98+ payload,
99+ headerForm,
100+ salt,
101+ toSpan<const uint8_t >(*initialDCID),
102+ version);
99103 if (!initialHeaderView.has_value ()) {
100104 return std::nullopt ;
101105 }
@@ -115,7 +119,7 @@ std::optional<std::size_t> QUICParser::parseInitial(
115119
116120bool QUICParser::parse (
117121 std::span<const std::byte> payload,
118- const ConnectionId& initialConnectionId,
122+ const std::optional< ConnectionId> & initialConnectionId,
119123 const uint8_t l4Protocol) noexcept
120124{
121125 // Handle coalesced packets
@@ -151,7 +155,7 @@ bool QUICParser::parse(
151155 secondaryHeaderSize = parseInitial (
152156 payload,
153157 headerView->destinationConnectionId ,
154- toSpan< const uint8_t >( initialConnectionId) ,
158+ initialConnectionId,
155159 headerView->headerForm ,
156160 *salt,
157161 *headerView->version );
0 commit comments