Client TURN per Delphi

Comunica con un server TURN da Delphi/C++Builder. Alloca indirizzi di trasporto relayed, gestisci permessi e canali, poi scambia dati con peer dietro NAT simmetrico — secondo RFC 8656.

TsgcTURNClient

Client TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tutti firmati con credenziali long-term secondo RFC 8656.

Classe componente

TsgcTURNClient

Protocollo

TURN (RFC 8656)

Piattaforme

Windows, macOS, Linux, iOS, Android

Edizione

Enterprise

Alloca, autorizza, invia

Imposta il server TURN, metti le credenziali su TURNOptions.Authentication, chiama Allocate, poi CreatePermission per ogni peer e SendIndication per inoltrare i dati.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
  sgcSocket_Classes;

// TFormTURN contiene FClient: TsgcTURNClient e 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));

  // il relay inoltra solo verso un peer per cui hai creato il permesso
  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();

Cosa c'è all'interno

Un client TURN tipizzato RFC 8656 — lo strato di relay per WebRTC quando l'attraversamento NAT con solo STUN fallisce.

Allocate / Refresh

Allocate invia la richiesta Allocate con REQUESTED-TRANSPORT e ottiene un indirizzo di trasporto relayed, che arriva su OnTURNAllocate come aAllocation.RelayedIP e RelayedPort. Refresh(lifetime) ne estende la durata e Refresh(0) dealloca.

CreatePermission

CreatePermission(peerIp) registra un peer i cui datagrammi il relay inoltrerà. I permessi scadono automaticamente dopo 5 minuti — aggiornali quando serve.

ChannelBind

ChannelBind(peerIp, peerPort) aggira l'overhead di 36 byte di Send/Data. Il componente sceglie il numero di canale, codifica l'header ChannelData da 4 byte e riporta il binding su OnTURNChannelBind.

Credenziali long-term

TURNOptions.Authentication.Username e Password popolano MESSAGE-INTEGRITY, usando il realm e il nonce estratti dalla risposta di challenge 401. Credentials seleziona short term o long term.

TURN su TCP

Transport := stunTCP sposta il canale di controllo su TCP per le reti che bloccano UDP, che è il percorso di RFC 6062. TURNOptions.AutoRefresh poi mantiene in vita da solo l'allocazione, i permessi e i canali.

Pronto per WebRTC

TsgcICEClient ne pilota uno tramite la sua proprietà TURNClient, e TsgcRTCPeerConnection alloca a partire dalle voci turn: di RTCOptions.ICEServers. La sequenza Allocate, CreatePermission e ChannelBind avviene per te.

Specifiche e riferimenti

Fonti autorevoli per il protocollo implementato da questo componente.

Documentazione e demo

Collegamenti diretti al riferimento del componente, al progetto demo pronto all'uso e al download della versione di prova.

Guida online — TsgcTURNClient Riferimento completo di proprietà, metodi ed eventi di questo componente.
Progetto demo — Demos\35.P2P\03.TURN Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto.
Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi e C++ Builder e riferimenti alle fonti primarie — solo per questo componente.
Manuale utente (PDF) Manuale completo che copre ogni componente della libreria.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto a usare TURN da Delphi?

Scarica la versione di prova gratuita e aggiungi il relay basato su TURN alle tue applicazioni Delphi.