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.
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.
Client TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tous signés avec des credentials longue durée selon la RFC 8656.
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
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();
Un client TURN typé conforme à la RFC 8656 — la couche de relais pour WebRTC quand la traversée NAT par STUN seul échoue.
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(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(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.
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.
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.
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.
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. | Ouvrir | |
| 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. | Ouvrir | |
| Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code Delphi et C++ Builder et références primaires — ce composant uniquement. | Ouvrir | |
| Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque. | Ouvrir |