8. Permissions
Pour chaque allocation, le serveur conserve une liste de zéro ou plusieurs permissions. Chaque permission se compose d'une adresse IP et d'un temps avant expiration associé. Lorsqu'une permission existe, le serveur autorise tous les pairs utilisant l'adresse IP de la permission à envoyer des données au client. Le temps avant expiration est le nombre de secondes jusqu'à ce que la permission expire. Dans le contexte d'une allocation, une permission est identifiée de manière unique par son adresse IP associée.
En envoyant soit une demande CreatePermission soit une demande ChannelBind, le client peut amener le serveur à installer ou rafraîchir une permission pour une adresse IP donnée. Cela provoque l'une des deux choses suivantes :
-
Si aucune permission pour cette adresse IP n'existe, alors une permission est créée avec l'adresse IP donnée et un temps avant expiration égal à la durée de vie de la permission (Permission Lifetime).
-
Si une permission pour cette adresse IP existe déjà, alors le temps avant expiration de cette permission est réinitialisé à la durée de vie de la permission.
La durée de vie de la permission doit être de 300 secondes (= 5 minutes).
Le temps avant expiration pour chaque permission est décrémenté une fois par seconde jusqu'à ce qu'il atteigne zéro, moment auquel la permission expire et est supprimée.
Les demandes CreatePermission et ChannelBind peuvent être librement entremêlées sur une permission. Une permission donnée peut être initialement installée et/ou rafraîchie avec une demande CreatePermission, puis ultérieurement rafraîchie avec une demande ChannelBind, ou vice versa.
Lorsqu'un datagramme UDP arrive à l'adresse de transport relayée pour l'allocation, le serveur extrait l'adresse IP source de l'en-tête IP. Le serveur compare ensuite cette adresse avec l'adresse IP associée à chaque permission dans la liste des permissions pour l'allocation. Si aucune correspondance n'est trouvée, le relais n'est pas autorisé et le serveur rejette silencieusement le datagramme UDP. Si une correspondance exacte est trouvée, alors la vérification de permission est considérée comme ayant réussi et le serveur continue à traiter le datagramme UDP comme spécifié ailleurs (section 10.3). Notez que seule l'adresse est comparée et le numéro de port n'est pas pris en compte.
Les permissions pour une allocation sont totalement indépendantes des permissions pour une allocation différente. Si une allocation expire, toutes ses permissions expirent avec elle.
NOTE : Bien que les permissions TURN expirent après 5 minutes, de nombreux NAT déployés au moment de la publication de ce document font expirer leurs liaisons UDP considérablement plus rapidement. Ainsi, une application utilisant TURN voudra probablement envoyer une sorte de trafic de maintien en vie à un rythme beaucoup plus rapide. Les applications utilisant ICE devraient suivre les directives de maintien en vie d'ICE [RFC5245], et les applications n'utilisant pas ICE sont recommandées de faire quelque chose de similaire.