Serveur TURN pour Delphi

Fais tourner ton propre serveur TURN (RFC 8656) en Delphi. Alloue des adresses de transport relayées pour les clients incapables d'établir un chemin pair à pair, avec credentials longue durée et quotas par allocation.

TsgcTURNServer

Un serveur TURN auto-hébergé — traite Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, gère les allocations et leur durée de vie, valide les identifiants long terme.

Classe du composant

TsgcTURNServer

Protocole

TURN (RFC 8656)

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Enterprise

Pose, configure le realm, distribue les credentials

Configure Port et le realm sur TURNOptions.Authentication.LongTermCredentials, fournis les mots de passe par utilisateur via OnSTUNRequestAuthorization, Active := True — ton serveur alloue désormais des relais pour tout client RFC 8656.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer contient FServer: TsgcTURNServer et le gestionnaire

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';

  // limite les abus : allocations par utilisateur et durée de vie maximale
  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
  // renvoie le mot de passe de cet utilisateur, vide rejette la requête
  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;

Sous le capot

Un relais auto-hébergé — pour que tes déploiements WebRTC et ICE cessent de dépendre de fournisseurs TURN tiers.

Allocate / Refresh / Free

Honore les requêtes Allocate avec REQUESTED-TRANSPORT, choisit un port de relais libre et suit la durée de vie. Refresh prolonge l'allocation ; le serveur la démonte à l'expiration.

CreatePermission / ChannelBind

Suit les permissions de pair et les liaisons de canaux par allocation. Rejette les trames Send/Data pour les pairs non autorisés selon la RFC 8656 §9.

Send / Data / ChannelData

Les enveloppes Send / Data de 36 octets et les trames ChannelData de 4 octets sont toutes deux prises en charge. Le relais transmet les datagrammes entre l'adresse de transport relayée et le pair lié.

Credentials longue durée

TURNOptions.Authentication.LongTermCredentials porte le realm, et OnSTUNRequestAuthorization te remet le nom d'utilisateur et ce realm pour que tu renvoies le mot de passe. Le serveur valide MESSAGE-INTEGRITY et fait tourner les nonces lui-même.

Quotas et ports de relais

TURNOptions.Allocation.MaxUserAllocations limite le nombre de relais qu'obtient un utilisateur, DefaultLifeTime et MaxLifeTime bornent la durée de vie de chacun, et MinPort / MaxPort / RelayIP fixent la plage de relais. Un utilisateur au-delà de la limite reçoit 486 Allocation Quota Reached.

Filtre chaque allocation

OnTURNBeforeAllocate te donne l'adresse demandeuse avec un var Reject, et OnTURNBeforeRelayIndication et OnTURNBeforeRelayChannelData font de même pour chaque datagramme relayé. OnTURNCreateAllocation et OnTURNDeleteAllocation suivent celles qui vivent.

Spécifications et références

Sources de référence pour le protocole implémenté par ce composant.

Documentation et démos

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 — TsgcTURNServer Référence complète des propriétés, méthodes et événements de ce composant.
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.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code Delphi et C++ Builder et références primaires — ce composant uniquement.
Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque.

Questions fréquentes sur le serveur TURN

Questions courantes sur l'exécution d'un relais TURN auto-hébergé en Delphi et C++ Builder.

Déposez un composant TsgcTURNServer, définissez Port et Realm, fournissez les mots de passe par utilisateur depuis l'événement OnSTUNRequestAuthorization, puis réglez Active := True. Le serveur gère alors Allocate, CreatePermission, ChannelBind, Send, Refresh et Data pour tout client RFC 8656, relayant les datagrammes entre l'adresse de transport relayée et le pair lié.
Il implémente TURN selon le RFC 8656, validant les identifiants à long terme avec MESSAGE-INTEGRITY et faisant tourner les nonces automatiquement. Il se réfère également au RFC 6062 pour les allocations TURN sur TCP et au RFC 8489 pour le format de message STUN sous-jacent, et prend en charge les transports UDP, TCP et TLS sur TCP.
Non. TsgcTURNServer est un relais auto-hébergé que vous intégrez dans votre propre application Delphi ou C++ Builder, de sorte que vos déploiements WebRTC et ICE peuvent cesser de dépendre de fournisseurs TURN tiers ou d'une installation coturn séparée. Les quotas par allocation (allocations maximales par utilisateur, bande passante et durée de vie) limitent les abus, avec OnQuotaExceeded qui signale les rejets.
Le serveur TURN fait partie de l'édition sgcWebSockets Enterprise et prend en charge Delphi 7 jusqu'à la dernière version de Delphi et les versions de C++ Builder correspondantes, sous Windows, macOS, Linux, iOS et Android. Téléchargez la version d'essai gratuite pour mettre en place un relais TURN dans votre propre projet.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à faire tourner ton propre serveur TURN ?

Télécharge l'essai gratuit et déploie un relais TURN en Delphi.