10. Metodi Send e Data
TURN supporta due meccanismi per inviare e ricevere dati dai peer. Questa sezione descrive l'uso dei meccanismi Send e Data, mentre la sezione 11 descrive l'uso dei canali.
10.1. Formazione di un'indicazione Send
Il client può utilizzare un'indicazione Send per passare dati al server per l'inoltro a un peer. Un client può utilizzare un'indicazione Send anche se un canale è associato a quel peer. Tuttavia, il client deve assicurarsi che ci sia un permesso installato per l'indirizzo IP del peer a cui viene inviata un'indicazione Send, il che protegge il server TURN dall'essere utilizzato per inviare dati a destinazioni arbitrarie da parte di terzi.
Quando forma un'indicazione Send, il client deve includere sia un attributo XOR-PEER-ADDRESS sia un attributo DATA. L'attributo XOR-PEER-ADDRESS contiene l'indirizzo di trasporto del peer a cui devono essere inviati i dati, e l'attributo DATA contiene i dati dell'applicazione effettivi da inviare al peer.
Il client può includere un attributo DONT-FRAGMENT nell'indicazione Send se desidera che il server imposti il bit DF sul datagramma UDP inviato al peer.
10.2. Ricezione di un'indicazione Send
Quando il server riceve un'indicazione Send, la elabora come da sezione 4 più le regole specifiche menzionate qui.
Il messaggio viene prima controllato per la validità. L'indicazione Send deve contenere sia un attributo XOR-PEER-ADDRESS sia un attributo DATA. Se uno di questi attributi è mancante o non valido, allora il messaggio viene scartato. Si noti che l'attributo DATA può contenere zero byte di dati.
L'indicazione Send può anche contenere l'attributo DONT-FRAGMENT. Se il server non è in grado di impostare il bit DF sul datagramma UDP in uscita quando questo attributo è presente, allora il server tratta l'attributo DONT-FRAGMENT come un attributo di comprensione richiesta sconosciuto (e quindi scarta l'indicazione Send).
Il server verifica anche che ci sia un permesso installato per l'indirizzo IP contenuto nell'attributo XOR-PEER-ADDRESS. Se tale permesso non esiste, il messaggio viene scartato. Si noti che un'indicazione Send non causa mai al server di aggiornare il permesso.
Il server può imporre restrizioni sui valori di indirizzo IP e porta consentiti nell'attributo XOR-PEER-ADDRESS -- se un valore non è consentito, il server scarta silenziosamente l'indicazione Send.
Se tutto è corretto, allora il server forma un datagramma UDP come segue:
-
l'indirizzo di trasporto sorgente è l'indirizzo di trasporto inoltrato dell'allocazione, dove l'allocazione è determinata dalla 5-tupla su cui è arrivata l'indicazione Send
-
l'indirizzo di trasporto di destinazione è preso dall'attributo XOR-PEER-ADDRESS
-
i dati che seguono l'header UDP sono il contenuto del campo valore dell'attributo DATA
La gestione dell'attributo DONT-FRAGMENT (se presente) è descritta nella sezione 12.
Il datagramma UDP risultante viene quindi inviato al peer.
10.3. Ricezione di un datagramma UDP
Quando il server riceve un datagramma UDP a un indirizzo di trasporto inoltrato attualmente allocato, il server cerca l'allocazione associata all'indirizzo di trasporto inoltrato. Il server verifica quindi se l'insieme dei permessi per l'allocazione consente l'inoltro del datagramma UDP come descritto nella sezione 8.
Se l'inoltro è consentito, allora il server verifica se c'è un canale associato al peer che ha inviato il datagramma UDP (vedere sezione 11). Se un canale è associato, allora l'elaborazione procede come descritto nella sezione 11.7.
Se l'inoltro è consentito ma nessun canale è associato al peer, allora il server forma e invia un'indicazione Data. L'indicazione Data deve contenere sia un XOR-PEER-ADDRESS sia un attributo DATA. L'attributo DATA è impostato sul valore del campo 'data octets' dal datagramma, e l'attributo XOR-PEER-ADDRESS è impostato sull'indirizzo di trasporto sorgente del datagramma UDP ricevuto. L'indicazione Data viene quindi inviata sulla 5-tupla associata all'allocazione.
10.4. Ricezione di un'indicazione Data
Quando il client riceve un'indicazione Data, verifica che l'indicazione Data contenga sia un XOR-PEER-ADDRESS sia un attributo DATA, e scarta l'indicazione se non li contiene. Il client dovrebbe anche verificare che il valore dell'attributo XOR-PEER-ADDRESS contenga un indirizzo IP con cui il client ritiene ci sia un permesso attivo, e scartare l'indicazione Data altrimenti. Si noti che l'attributo DATA può contenere zero byte di dati.
NOTA: Quest'ultimo controllo protegge il client da un attaccante che in qualche modo riesce a ingannare il server per installare permessi non desiderati dal client.
Se l'indicazione Data supera i controlli di cui sopra, il client consegna gli ottetti di dati all'interno dell'attributo DATA all'applicazione, insieme a un'indicazione che sono stati ricevuti dal peer il cui indirizzo di trasporto è dato dall'attributo XOR-PEER-ADDRESS.