@@ -365,13 +365,15 @@ void append_parameter(std::vector<std::uint8_t>& out,
365365 }
366366}
367367
368- void append_setup_option (std::vector<std::uint8_t >& out,
369- DraftVersion draft,
370- std::uint64_t type,
371- std::span<const std::uint8_t > value) {
372- append_moqint (out, draft, type);
368+ void append_setup_option_delta (std::vector<std::uint8_t >& out,
369+ DraftVersion draft,
370+ std::uint64_t & previous_type,
371+ std::uint64_t type,
372+ std::span<const std::uint8_t > value) {
373+ append_moqint (out, draft, type - previous_type);
373374 append_moqint (out, draft, value.size ());
374375 out.insert (out.end (), value.begin (), value.end ());
376+ previous_type = type;
375377}
376378
377379void append_parameter_delta (std::vector<std::uint8_t >& out,
@@ -547,8 +549,9 @@ std::vector<std::uint8_t> encode_setup_message(const SetupMessage& message) {
547549 if (message.transport == TransportKind::kRawQuic ) {
548550 const std::vector<std::uint8_t > path = to_bytes (message.path );
549551 const std::vector<std::uint8_t > authority = to_bytes (message.authority );
550- append_setup_option (payload, message.draft , kSetupParamPath , path);
551- append_setup_option (payload, message.draft , kSetupParamAuthority , authority);
552+ std::uint64_t previous_option_type = 0 ;
553+ append_setup_option_delta (payload, message.draft , previous_option_type, kSetupParamPath , path);
554+ append_setup_option_delta (payload, message.draft , previous_option_type, kSetupParamAuthority , authority);
552555 }
553556
554557 std::vector<std::uint8_t > message_bytes;
@@ -631,10 +634,16 @@ bool decode_server_setup_message(std::span<const std::uint8_t> bytes, ServerSetu
631634
632635 if (message_type == kSetupType ) {
633636 message.draft = DraftVersion::kDraft18 ;
637+ std::uint64_t previous_option_type = 0 ;
634638 while (offset < payload_end) {
635639 std::uint64_t option_type = 0 ;
636640 std::uint64_t option_length = 0 ;
637- if (!decode_moqint_impl (payload_bytes, offset, message_draft, option_type) ||
641+ if (!decode_parameter_type (payload_bytes,
642+ offset,
643+ message_draft,
644+ previous_option_type,
645+ true ,
646+ option_type) ||
638647 !decode_moqint_impl (payload_bytes, offset, message_draft, option_length) ||
639648 offset + option_length > payload_end) {
640649 return false ;
0 commit comments