Server TURN per Delphi

Esegui il tuo server TURN (RFC 8656) in Delphi. Alloca indirizzi di trasporto relayed per client che non riescono a stabilire un percorso peer-to-peer, con credenziali long-term e quote per allocazione.

TsgcTURNServer

Un server TURN self-hosted — elabora Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, gestisce le allocazioni e la loro durata, valida le credenziali long-term.

Classe componente

TsgcTURNServer

Protocollo

TURN (RFC 8656)

Piattaforme

Windows, macOS, Linux, iOS, Android

Edizione

Enterprise

Trascina, imposta il realm, distribuisci credenziali

Imposta Port e il realm su TURNOptions.Authentication.LongTermCredentials, fornisci le password per utente tramite OnSTUNRequestAuthorization, Active := True — il tuo server ora alloca relay per qualunque client RFC 8656.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer contiene FServer: TsgcTURNServer e l'handler

procedure TFormTURNServer.StartServer;
begin
  FServer := TsgcTURNServer.Create(nil);
  FServer.Port := 3478;

  FServer.TURNOptions.Authentication.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Realm :=
    'turn.example.com';

  // limita gli abusi: allocazioni per utente e durata massima
  FServer.TURNOptions.Allocation.MaxUserAllocations := 4;
  FServer.TURNOptions.Allocation.MaxLifeTime := 3600;

  FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;

  FServer.Active := True;
end;

procedure TFormTURNServer.OnSTUNRequestAuthorization(Sender: TObject;
  const aRequest: TsgcSTUN_Message;
  const aUsername, aRealm: string;
  var Password: string);
begin
  // restituisci la password di quell'utente, vuota rifiuta la richiesta
  Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcTURNServer *Server = new TsgcTURNServer(this);
Server->Port = 3478;
Server->TURNOptions->Authentication->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Realm = "turn.example.com";
Server->TURNOptions->Allocation->MaxUserAllocations = 4;
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;

Cosa c'è all'interno

Un relay self-hosted — permette ai tuoi deployment WebRTC e ICE di smettere di dipendere da provider TURN di terze parti.

Allocate / Refresh / Free

Onora le richieste Allocate con REQUESTED-TRANSPORT, sceglie una porta di relay libera e traccia la durata. Refresh estende l'allocazione; il server la termina alla scadenza.

CreatePermission / ChannelBind

Traccia permessi peer e channel binding per ogni allocazione. Scarta frame Send/Data per peer non autorizzati, secondo RFC 8656 §9.

Send / Data / ChannelData

Sono supportati sia gli envelope Send / Data da 36 byte sia i frame ChannelData da 4 byte. Il relay inoltra datagrammi tra il relayed-transport-address e il peer associato.

Credenziali long-term

TURNOptions.Authentication.LongTermCredentials contiene il realm, e OnSTUNRequestAuthorization ti espone lo username e quel realm così restituisci la password. Il server valida MESSAGE-INTEGRITY e ruota da solo i nonce.

Quote e porte di relay

TURNOptions.Allocation.MaxUserAllocations limita quanti relay ottiene un utente, DefaultLifeTime e MaxLifeTime limitano quanto vive ciascuno, e MinPort / MaxPort / RelayIP fissano l'intervallo di relay. Un utente oltre il limite riceve 486 Allocation Quota Reached.

Vaglia ogni allocazione

OnTURNBeforeAllocate ti passa l'indirizzo richiedente con un var Reject, e OnTURNBeforeRelayIndication e OnTURNBeforeRelayChannelData fanno lo stesso per ogni datagramma inoltrato. OnTURNCreateAllocation e OnTURNDeleteAllocation tracciano quelle attive.

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 — TsgcTURNServer 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.

Domande frequenti sul server TURN

Domande comuni sull'esecuzione di un relay TURN self-hosted in Delphi e C++ Builder.

Posiziona un componente TsgcTURNServer, imposta Port e Realm, fornisci le password per utente dall'evento OnSTUNRequestAuthorization, poi imposta Active := True. Il server gestisce quindi Allocate, CreatePermission, ChannelBind, Send, Refresh e Data per qualsiasi client RFC 8656, inoltrando i datagram tra l'indirizzo di trasporto relayed e il peer associato.
Implementa TURN secondo la RFC 8656, validando le credenziali a lungo termine con MESSAGE-INTEGRITY e ruotando automaticamente i nonce. Fa inoltre riferimento alla RFC 6062 per le allocazioni TURN su TCP e alla RFC 8489 per il formato di messaggio STUN sottostante, e supporta i trasporti UDP, TCP e TLS su TCP.
No. TsgcTURNServer è un relay self-hosted che integri nella tua applicazione Delphi o C++ Builder, così i tuoi deployment WebRTC e ICE possono smettere di dipendere da provider TURN di terze parti o da un'installazione coturn separata. Le quote per allocazione (max allocazioni per utente, banda e durata) limitano gli abusi, con OnQuotaExceeded che segnala i rifiuti.
Il server TURN fa parte dell'edizione Enterprise di sgcWebSockets e supporta da Delphi 7 fino all'ultima release di Delphi e le versioni corrispondenti di C++ Builder, su Windows, macOS, Linux, iOS e Android. Scarica la trial gratuita per attivare un relay TURN nel tuo progetto.
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 eseguire il tuo server TURN?

Scarica la versione di prova gratuita e avvia un relay TURN in Delphi.