Client TURN pour Delphi

Dialogue avec un serveur TURN depuis Delphi/C++Builder. Alloue des adresses de transport relayées, gère les permissions et canaux, puis échange des données avec des pairs derrière un NAT symétrique — selon la RFC 8656.

TsgcTURNClient

Client TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tous signés avec des credentials longue durée selon la RFC 8656.

Classe du composant

TsgcTURNClient

Protocole

TURN (RFC 8656)

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Enterprise

Alloue, autorise, envoie

Configure le serveur TURN, place les identifiants sur TURNOptions.Authentication, appelle Allocate, puis CreatePermission pour chaque pair et SendIndication pour relayer les données.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
  sgcSocket_Classes;

// TFormTURN contient FClient: TsgcTURNClient et FLog: TStringList

procedure TFormTURN.StartAllocation;
begin
  FClient := TsgcTURNClient.Create(nil);
  FClient.Host := 'turn.example.com';
  FClient.Port := 3478;
  FClient.TURNOptions.Authentication.Credentials := stauLongTermCredential;
  FClient.TURNOptions.Authentication.Username := 'alice';
  FClient.TURNOptions.Authentication.Password := 'secret';

  FClient.OnTURNAllocate := OnTURNAllocate;

  FClient.Allocate;
end;

procedure TFormTURN.OnTURNAllocate(Sender: TObject;
  const aSocket: TsgcSocketConnection;
  const aMessage: TsgcSTUN_Message;
  const aAllocation: TsgcTURN_ResponseAllocation);
begin
  FLog.Add('relay: ' + aAllocation.RelayedIP + ':' +
    IntToStr(aAllocation.RelayedPort));

  // le relais ne transmet que pour un pair que tu as autorisé
  FClient.CreatePermission('192.0.2.1');
  FClient.SendIndication('192.0.2.1', 5000, 'hello via TURN');
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Types.hpp, sgcP2P_TURN_Classes.hpp
TsgcTURNClient *Client = new TsgcTURNClient(this);
Client->Host = "turn.example.com";
Client->Port = 3478;
Client->TURNOptions->Authentication->Credentials = stauLongTermCredential;
Client->TURNOptions->Authentication->Username = "alice";
Client->TURNOptions->Authentication->Password = "secret";
Client->OnTURNAllocate = OnTURNAllocate;
Client->Allocate();

Sous le capot

Un client TURN typé conforme à la RFC 8656 — la couche de relais pour WebRTC quand la traversée NAT par STUN seul échoue.

Allocate / Refresh

Allocate envoie la requête Allocate avec REQUESTED-TRANSPORT et obtient une adresse de transport relayée, qui arrive sur OnTURNAllocate dans aAllocation.RelayedIP et RelayedPort. Refresh(lifetime) la prolonge et Refresh(0) désalloue.

CreatePermission

CreatePermission(peerIp) enregistre un pair dont les datagrammes seront relayés. Les permissions expirent automatiquement au bout de 5 minutes — rafraîchis-les si besoin.

ChannelBind

ChannelBind(peerIp, peerPort) contourne le surcoût de 36 octets de Send/Data. Le composant choisit le numéro de canal, encode l'en-tête ChannelData de 4 octets et signale la liaison sur OnTURNChannelBind.

Credentials longue durée

TURNOptions.Authentication.Username et Password renseignent MESSAGE-INTEGRITY, à partir du realm et du nonce extraits du défi 401. Credentials choisit entre court terme et long terme.

TURN sur TCP

Transport := stunTCP déplace le canal de contrôle sur TCP pour les réseaux qui bloquent UDP, ce qui correspond au chemin de la RFC 6062. TURNOptions.AutoRefresh maintient ensuite tout seul l'allocation, les permissions et les canaux en vie.

Prêt pour WebRTC

TsgcICEClient en pilote un via sa propriété TURNClient, et TsgcRTCPeerConnection alloue à partir des entrées turn: de RTCOptions.ICEServers. La séquence Allocate, CreatePermission et ChannelBind se déroule pour toi.

Spécifications et références

Sources de référence pour le protocole implémenté par ce composant.

Documentation et démos

Lien direct vers la référence du composant, projet de démo prêt à l'emploi et téléchargement de l'essai.

Aide en ligne — TsgcTURNClient Référence complète des propriétés, méthodes et événements de ce composant.
Projet de démo — Demos\35.P2P\03.TURN Projet d'exemple prêt à l'emploi. Livré dans le package sgcWebSockets — télécharge l'essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code Delphi et C++ Builder et références primaires — ce composant uniquement.
Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à utiliser TURN depuis Delphi ?

Télécharge l'essai gratuit et ajoute le relais basé sur TURN à tes applications Delphi.