TURN-client voor Delphi

Praat met een TURN-server vanuit Delphi/C++Builder. Wijs gerelayde transportadressen toe, beheer permissions en channels en wissel data uit met peers achter symmetric NAT — volgens RFC 8656.

TsgcTURNClient

TURN-client — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, allemaal ondertekend met long-term credentials volgens RFC 8656.

Componentklasse

TsgcTURNClient

Protocol

TURN (RFC 8656)

Platforms

Windows, macOS, Linux, iOS, Android

Editie

Enterprise

Allocate, permission, send

Stel de TURN-server in, plaats de credentials op TURNOptions.Authentication, roep Allocate aan en gebruik daarna CreatePermission per peer en SendIndication om data te relayen.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
  sgcSocket_Classes;

// TFormTURN bevat FClient: TsgcTURNClient en 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));

  // de relay stuurt alleen door voor een peer waarvoor je permission hebt gezet
  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();

Wat zit erin

Een getypeerde RFC 8656 TURN-client — de relay-laag voor WebRTC wanneer NAT-traversal met alleen STUN faalt.

Allocate / Refresh

Allocate verstuurt het Allocate-request met REQUESTED-TRANSPORT en verkrijgt een gerelayd transportadres, dat binnenkomt in OnTURNAllocate als aAllocation.RelayedIP en RelayedPort. Refresh(lifetime) verlengt de allocation en Refresh(0) dealloceert die.

CreatePermission

CreatePermission(peerIp) registreert een peer waarvan de relay datagrammen mag doorsturen. Permissions verlopen automatisch na 5 minuten — ververs ze indien nodig.

ChannelBind

ChannelBind(peerIp, peerPort) omzeilt de 36 byte Send/Data-overhead. De component kiest het channel number, codeert de 4 byte ChannelData-header en meldt de binding via OnTURNChannelBind.

Long-term credentials

TURNOptions.Authentication.Username en Password vullen MESSAGE-INTEGRITY, met het realm en de nonce uit de 401 challenge. Credentials kiest tussen short term en long term.

TURN over TCP

Transport := stunTCP verplaatst het controlekanaal naar TCP voor netwerken die UDP blokkeren, en dat is het pad uit RFC 6062. TURNOptions.AutoRefresh houdt de allocation, de permissions en de channels daarna vanzelf in leven.

WebRTC-ready

TsgcICEClient stuurt er een aan via zijn TURNClient-eigenschap, en TsgcRTCPeerConnection alloceert vanuit de turn:-items van RTCOptions.ICEServers. De reeks Allocate, CreatePermission en ChannelBind verloopt automatisch.

Specificaties & referenties

Autoritatieve bronnen voor het protocol dat dit component implementeert.

Documentatie & demo's

Direct linken naar de componentreferentie, het kant-en-klare demoproject pakken en de proefversie downloaden.

Online help — TsgcTURNClient Volledige referentie van eigenschappen, methoden en gebeurtenissen voor dit component.
Demoproject — Demos\35.P2P\03.TURN Kant-en-klaar voorbeeldproject. Zit in het sgcWebSockets-pakket — download hieronder de proefversie.
Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi & C++ Builder en primaire bronverwijzingen — alleen dit component.
Gebruikershandleiding (PDF) Uitgebreide handleiding voor elk component in de bibliotheek.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om TURN vanuit Delphi te gebruiken?

Download de gratis proefversie en voeg op TURN gebaseerde relaying toe aan je Delphi-toepassingen.