Aller au contenu principal

15. Grammar (Grammaire)

Cette spécification définit sept nouveaux attributs SDP -- les attributs "candidate", "remote-candidates", "ice-lite", "ice-mismatch", "ice-ufrag", "ice-pwd" et "ice-options".

15.1. "candidate" Attribute (Attribut "candidate")

L'attribut candidate est un attribut de niveau média uniquement. Il contient une adresse de transport pour un candidat qui peut être utilisé pour les vérifications de connectivité.

La syntaxe de cet attribut est définie à l'aide de l'Augmented BNF telle que définie dans la RFC 5234 [RFC5234] :

candidate-attribute   = "candidate" ":" foundation SP component-id SP
transport SP
priority SP
connection-address SP ;from RFC 4566
port ;port from RFC 4566
SP cand-type
[SP rel-addr]
[SP rel-port]
*(SP extension-att-name SP
extension-att-value)

foundation = 1*32ice-char
component-id = 1*5DIGIT
transport = "UDP" / transport-extension
transport-extension = token ; from RFC 3261
priority = 1*10DIGIT
cand-type = "typ" SP candidate-types
candidate-types = "host" / "srflx" / "prflx" / "relay" / token
rel-addr = "raddr" SP connection-address
rel-port = "rport" SP port
extension-att-name = byte-string ;from RFC 4566
extension-att-value = byte-string
ice-char = ALPHA / DIGIT / "+" / "/"

Cette grammaire encode les informations principales sur un candidat : son adresse IP, son port et son protocole de transport, ainsi que ses propriétés : la foundation, l'ID de composant, la priorité, le type et l'adresse de transport associée :

<connection-address> : est tiré de la RFC 4566 [RFC4566]. C'est l'adresse IP du candidat, permettant les adresses IPv4, les adresses IPv6 et les noms de domaine complets (FQDN). Lors de l'analyse de ce champ, un agent peut différencier une adresse IPv4 et une adresse IPv6 par la présence d'un deux-points dans sa valeur - la présence d'un deux-points indique IPv6. Un agent MUST ignorer les lignes candidate qui incluent des candidats avec des versions d'adresse IP qui ne sont pas prises en charge ou reconnues. Une adresse IP SHOULD être utilisée, mais un FQDN MAY être utilisé à la place d'une adresse IP. Dans ce cas, lors de la réception d'une offre ou d'une réponse contenant un FQDN dans un attribut a=candidate, le FQDN est recherché dans le DNS d'abord à l'aide d'un enregistrement AAAA (en supposant que l'agent prend en charge IPv6), et si aucun résultat n'est trouvé ou si l'agent ne prend en charge que IPv4, en utilisant un A. Si la requête DNS renvoie plusieurs adresses IP, une est choisie, puis utilisée pour le reste du traitement ICE.

<port> : est également tiré de la RFC 4566 [RFC4566]. C'est le port du candidat.

<transport> : indique le protocole de transport pour le candidat. Cette spécification ne définit que UDP. Cependant, une extensibilité est fournie pour permettre l'utilisation de futurs protocoles de transport avec ICE, tels que TCP ou le protocole de contrôle de congestion de datagramme (DCCP) [RFC4340].

<foundation> : est composé de 1 à 32 <ice-char>. C'est un identifiant qui est équivalent pour deux candidats qui sont du même type, partagent la même base et proviennent du même serveur STUN. La foundation est utilisée pour optimiser les performances ICE dans l'algorithme Frozen.

<component-id> : est un entier positif entre 1 et 256 qui identifie le composant spécifique du flux multimédia pour lequel il s'agit d'un candidat. Il MUST commencer à 1 et MUST s'incrémenter de 1 pour chaque composant d'un candidat particulier. Pour les flux multimédias basés sur RTP, les candidats pour le média RTP réel MUST avoir un ID de composant de 1, et les candidats pour RTCP MUST avoir un ID de composant de 2. Les autres types de flux multimédias qui nécessitent plusieurs composants MUST développer des spécifications qui définissent le mappage des composants aux ID de composant. Voir la section 14 pour une discussion supplémentaire sur l'extension d'ICE à de nouveaux flux multimédias.

<priority> : est un entier positif entre 1 et (2**31 - 1).

<cand-type> : encode le type de candidat. Cette spécification définit les valeurs "host", "srflx", "prflx" et "relay" pour les candidats host, server reflexive, peer reflexive et relayed, respectivement. L'ensemble des types de candidats est extensible pour l'avenir.

<rel-addr> et <rel-port> : transmettent les adresses de transport associées au candidat, utiles pour les diagnostics et à d'autres fins. <rel-addr> et <rel-port> MUST être présents pour les candidats server reflexive, peer reflexive et relayed. Si un candidat est server ou peer reflexive, <rel-addr> et <rel-port> sont égaux à la base pour ce candidat server ou peer reflexive. Si le candidat est relayed, <rel-addr> et <rel-port> sont égaux à l'adresse mappée dans la réponse Allocate qui a fourni au client ce candidat relayed (voir l'annexe B.3 pour une discussion sur son objectif). Si le candidat est un candidat host, <rel-addr> et <rel-port> MUST être omis.

L'attribut candidate peut lui-même être étendu. La grammaire permet d'ajouter de nouvelles paires nom/valeur à la fin de l'attribut. Une implémentation MUST ignorer toute paire nom/valeur qu'elle ne comprend pas.

15.2. "remote-candidates" Attribute (Attribut "remote-candidates")

La syntaxe de l'attribut "remote-candidates" est définie à l'aide de l'Augmented BNF telle que définie dans la RFC 5234 [RFC5234]. L'attribut remote-candidates est un attribut de niveau média uniquement.

remote-candidate-att = "remote-candidates" ":" remote-candidate
0*(SP remote-candidate)
remote-candidate = component-ID SP connection-address SP port

L'attribut contient une connection-address et un port pour chaque composant. L'ordre des composants n'est pas pertinent. Cependant, une valeur MUST être présente pour chaque composant d'un flux multimédia. Cet attribut MUST être inclus dans une offre par un agent de contrôle pour un flux multimédia qui est terminé (Completed), et MUST NOT être inclus dans tout autre cas.

15.3. "ice-lite" and "ice-mismatch" Attributes (Attributs "ice-lite" et "ice-mismatch")

La syntaxe des attributs "ice-lite" et "ice-mismatch", qui sont tous deux des indicateurs, est :

ice-lite               = "ice-lite"
ice-mismatch = "ice-mismatch"

"ice-lite" est un attribut de niveau session uniquement, et indique qu'un agent est une implémentation lite. "ice-mismatch" est un attribut de niveau média uniquement, et lorsqu'il est présent dans une réponse, indique que l'offre est arrivée avec une destination par défaut pour un composant multimédia qui n'avait pas d'attribut candidate correspondant.

15.4. "ice-ufrag" and "ice-pwd" Attributes (Attributs "ice-ufrag" et "ice-pwd")

Les attributs "ice-ufrag" et "ice-pwd" transmettent le fragment de nom d'utilisateur et le mot de passe utilisés par ICE pour l'intégrité des messages. Leur syntaxe est :

ice-pwd-att           = "ice-pwd" ":" password
ice-ufrag-att = "ice-ufrag" ":" ufrag
password = 22*256ice-char
ufrag = 4*256ice-char

Les attributs "ice-pwd" et "ice-ufrag" peuvent apparaître au niveau session ou au niveau média. Lorsqu'ils sont présents dans les deux, la valeur au niveau média a la priorité. Ainsi, la valeur au niveau session est effectivement une valeur par défaut qui s'applique à tous les flux multimédias, sauf si elle est remplacée par une valeur au niveau média. Qu'ils soient présents au niveau session ou média, il MUST y avoir un attribut ice-pwd et ice-ufrag pour chaque flux multimédia. Si deux flux multimédias ont des ice-ufrag identiques, ils MUST avoir des ice-pwd identiques.

Les attributs ice-ufrag et ice-pwd MUST être choisis de manière aléatoire au début d'une session. L'attribut ice-ufrag MUST contenir au moins 24 bits d'aléatoire, et l'attribut ice-pwd MUST contenir au moins 128 bits d'aléatoire. Cela signifie que l'attribut ice-ufrag aura au moins 4 caractères de long et l'ice-pwd au moins 22 caractères de long, car la grammaire de ces attributs permet 6 bits d'aléatoire par caractère. Les attributs MAY être plus longs que 4 et 22 caractères, respectivement, bien sûr, jusqu'à 256 caractères. La limite supérieure permet le dimensionnement de la mémoire tampon dans les implémentations. Sa grande limite supérieure permet d'ajouter des quantités accrues d'aléatoire au fil du temps.

15.5. "ice-options" Attribute (Attribut "ice-options")

L'attribut "ice-options" est un attribut de niveau session. Il contient une série de jetons qui identifient les options prises en charge par l'agent. Sa grammaire est :

ice-options           = "ice-options" ":" ice-option-tag
0*(SP ice-option-tag)
ice-option-tag = 1*ice-char