Delphi TURN Client

Kommuniziere mit einem TURN-Server aus Delphi/C++Builder. Allokiere weitergeleitete Transportadressen, verwalte Permissions und Channels und tausche dann Daten mit Peers hinter symmetrischem NAT aus — gemäß RFC 8656.

TsgcTURNClient

TURN-Client — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, allesamt mit Long-Term-Credentials gemäß RFC 8656 signiert.

Komponentenklasse

TsgcTURNClient

Protokoll

TURN (RFC 8656)

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Enterprise

Allokieren, freischalten, senden

Setze den TURN-Server, hinterlege die Credentials auf TURNOptions.Authentication, rufe Allocate auf und dann CreatePermission für jeden Peer und SendIndication, um Daten weiterzuleiten.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
  sgcSocket_Classes;

// TFormTURN enthält FClient: TsgcTURNClient und 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));

  // das Relay leitet nur für einen Peer weiter, für den eine Permission besteht
  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();

Was steckt drin

Ein typisierter RFC-8656-TURN-Client — die Relay-Schicht für WebRTC, wenn reines STUN-NAT-Traversal fehlschlägt.

Allocate / Refresh

Allocate sendet den Allocate-Request mit REQUESTED-TRANSPORT und erhält eine weitergeleitete Transportadresse, die bei OnTURNAllocate als aAllocation.RelayedIP und RelayedPort eintrifft. Refresh(lifetime) verlängert sie und Refresh(0) hebt die Allokation auf.

CreatePermission

CreatePermission(peerIp) registriert einen Peer, dessen Datagramme das Relay weiterleitet. Permissions laufen nach 5 Minuten automatisch ab — bei Bedarf erneuern.

ChannelBind

ChannelBind(peerIp, peerPort) umgeht den 36-Byte-Overhead von Send/Data. Die Komponente wählt die Kanalnummer, kodiert den 4-Byte-ChannelData-Header und meldet die Bindung über OnTURNChannelBind.

Long-Term-Credentials

TURNOptions.Authentication.Username und Password befüllen MESSAGE-INTEGRITY und nutzen dabei Realm und Nonce aus der 401-Challenge. Credentials wählt zwischen Short-Term und Long-Term.

TURN über TCP

Transport := stunTCP verlagert den Steuerkanal auf TCP für Netze, die UDP blockieren, das ist der Weg nach RFC 6062. TURNOptions.AutoRefresh hält anschließend die Allokation, die Permissions und die Kanäle von selbst am Leben.

WebRTC-tauglich

TsgcICEClient steuert einen solchen Client über sein TURNClient-Property, und TsgcRTCPeerConnection allokiert über die turn:-Einträge von RTCOptions.ICEServers. Der Ablauf aus Allocate, CreatePermission und ChannelBind erfolgt automatisch.

Spezifikationen & Referenzen

Maßgebliche Quellen für das Protokoll, das diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, hole dir das sofort lauffähige Demo-Projekt und lade die Testversion herunter.

Online-Hilfe — TsgcTURNClient Vollständige Referenz zu Eigenschaften, Methoden und Ereignissen dieser Komponente.
Demo-Projekt — Demos\35.P2P\03.TURN Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, TURN aus Delphi zu nutzen?

Lade die kostenlose Testversion herunter und ergänze deine Delphi-Anwendungen um TURN-basiertes Relaying.