Résumé

  • Dans la version 21, le paramètre LOCATION_FILTER de type 0x21 portait une longueur en octets qui indiquait combien de champs entiers suivaient. La version 22, datée du 1er octobre, remplace cet indicateur par un Location Filter Type explicite : six valeurs désignent les formes admises ; une autre valeur provoque PROTOCOL_VIOLATION.
  • Le journal de modifications classe cette révision dans le plan de session et de contrôle. Il classe séparément la nouvelle présentation des abonnements en pause parmi les clarifications éditoriales. Le document demeure un Internet-Draft actif du groupe MOQ, non une RFC.

Le problème ne se lit pas sur le voyant d'une connexion QUIC. Un abonné cherche, par exemple, à reprendre un flux à partir d'un groupe précis ; le relais doit traduire cette intention en objets effectivement transmis. Une session ouverte n'atteste pas que la borne de départ a été décodée selon le même contrat à chaque extrémité. C'est pourquoi une retouche apparemment minuscule d'un champ de contrôle peut devenir une question d'acceptation entre versions.

L'ancien format commençait par le type de paramètre 0x21, puis un entier variable nommé Length. Ce nombre désignait la taille en octets de zéro à quatre autres entiers variables. L'absence de données représentait l'absence de filtre ; deux champs nuls formaient le cas particulier « prochain objet ». La structure exacte était donc établie par la taille et les valeurs reçues. Ce mécanisme appartenait à la version 21, pas à une norme déjà achevée.

La version 22 garde le numéro du paramètre mais change la question posée au décodeur. Le prochain entier est un type de filtre : 0x00 pour aucun filtre, 0x01 pour un début relatif, 0x02 pour un début absolu, 0x03 pour une borne finale de groupe, 0x04 pour une plage absolue et 0x05 pour le prochain objet. Seules les données indiquées par ce type doivent suivre. Le dernier cas n'a plus besoin de la paire de zéros de l'ancienne rédaction. Une valeur hors de cet ensemble constitue une violation du protocole. Il ne faut pas confondre cette liste avec six services ou six classes de contenus : elle décrit seulement six façons de coder une sélection.

Le champ est utilisé dans des messages de souscription, de récupération, de publication, de mise à jour et de notification d'état. Un relais qui reçoit puis reformule une requête est donc un endroit naturel où vérifier la version de format utilisée sur chaque segment. Ce constat découle de la portée du paramètre ; le projet ne fournit ni incident attribué à un relais, ni résultat d'essai interopérable, ni mesure d'erreurs en production.

MOQT prévoit une négociation de version par ALPN sur QUIC et par le mécanisme correspondant de WebTransport. Le texte distingue les identifiants provisoires des brouillons. Il serait donc abusif d'affirmer qu'une implémentation correcte mélange automatiquement les octets de la version 21 et ceux de la version 22. La recommandation pratique est plutôt de vérifier que le numéro de brouillon annoncé correspond au décodeur exécuté, puis que le filtre demandé correspond aux objets reçus.

Enfin, l'annexe sépare ce changement du travail de réorganisation du texte. La définition plus lisible de la pause d'abonnement, des trous dans FETCH et des noms de réponses y figure sous les changements éditoriaux. Elle peut faciliter l'implémentation ; elle ne transforme pas rétroactivement ces fonctions en inventions de cette semaine. L'événement publiable ici est le remplacement d'une forme inférée par une forme déclarée sur le fil.

Sources