Delphi TURN Server
Betreibe deinen eigenen TURN-Server (RFC 8656) in Delphi. Allokiere weitergeleitete Transportadressen für Clients, die keinen Peer-to-Peer-Pfad herstellen können — mit Long-Term-Credentials und Per-Allocation-Quotas.
Betreibe deinen eigenen TURN-Server (RFC 8656) in Delphi. Allokiere weitergeleitete Transportadressen für Clients, die keinen Peer-to-Peer-Pfad herstellen können — mit Long-Term-Credentials und Per-Allocation-Quotas.
Ein selbst gehosteter TURN-Server — verarbeitet Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, verwaltet Allokationen und deren Lebensdauer und validiert Long-Term-Credentials.
TsgcTURNServer
Windows, macOS, Linux, iOS, Android
Enterprise
Setze Port und den Realm auf TURNOptions.Authentication.LongTermCredentials, liefere Passwörter pro Benutzer über OnSTUNRequestAuthorization, Active := True — dein Server allokiert jetzt Relays für jeden RFC-8656-Client.
uses
sgcP2P, sgcP2P_STUN_Classes;
// TFormTURNServer enthält FServer: TsgcTURNServer und den 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';
// Missbrauch begrenzen: Allokationen pro Benutzer und maximale Lebensdauer
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
// das Passwort dieses Benutzers zurückgeben, leer lehnt die Anfrage ab
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;
Ein selbst gehostetes Relay — sodass deine WebRTC- und ICE-Deployments nicht mehr auf Drittanbieter-TURN-Provider angewiesen sind.
Bedient Allocate-Requests mit REQUESTED-TRANSPORT, wählt einen freien Relay-Port und verfolgt die Lebensdauer. Refresh verlängert die Allokation; der Server baut sie beim Ablauf ab.
Verfolgt Peer-Permissions und Channel-Bindings pro Allokation. Verwirft Send-/Data-Frames für Peers, die gemäß RFC 8656 §9 nicht freigeschaltet sind.
Sowohl 36-Byte-Send/Data-Envelopes als auch 4-Byte-ChannelData-Frames werden unterstützt. Das Relay leitet Datagramme zwischen der weitergeleiteten Transportadresse und dem gebundenen Peer weiter.
TURNOptions.Authentication.LongTermCredentials enthält den Realm, und OnSTUNRequestAuthorization übergibt dir den Benutzernamen und diesen Realm, sodass du das Passwort zurückgibst. Der Server validiert MESSAGE-INTEGRITY und rotiert die Nonces selbst.
TURNOptions.Allocation.MaxUserAllocations begrenzt, wie viele Relays ein Benutzer bekommt, DefaultLifeTime und MaxLifeTime begrenzen deren Lebensdauer, und MinPort / MaxPort / RelayIP legen den Relay-Bereich fest. Ein Benutzer über dem Limit erhält 486 Allocation Quota Reached.
OnTURNBeforeAllocate liefert dir die anfragende Adresse mit einem var Reject, und OnTURNBeforeRelayIndication sowie OnTURNBeforeRelayChannelData tun dasselbe für jedes weitergeleitete Datagramm. OnTURNCreateAllocation und OnTURNDeleteAllocation verfolgen die bestehenden Allokationen.
Springe direkt zur Komponentenreferenz, hole dir das sofort lauffähige Demo-Projekt und lade die Testversion herunter.
| Online-Hilfe — TsgcTURNServer Vollständige Referenz zu Eigenschaften, Methoden und Ereignissen dieser Komponente. | Öffnen | |
| Demo-Projekt — Demos\35.P2P\03.TURN Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter. | Öffnen | |
| Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente. | Öffnen | |
| Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt. | Öffnen |
Häufige Fragen zum Betrieb eines selbst gehosteten TURN-Relays in Delphi und C++ Builder.
TsgcTURNServer-Komponente, setze Port und Realm, liefere Passwörter pro Benutzer aus dem OnSTUNRequestAuthorization-Ereignis und setze dann Active := True. Der Server verarbeitet dann Allocate, CreatePermission, ChannelBind, Send, Refresh und Data für jeden RFC-8656-Client und leitet Datagramme zwischen der weitergeleiteten Transportadresse und dem gebundenen Peer weiter.TsgcTURNServer ist ein selbst gehostetes Relay, das du in deine eigene Delphi- oder C++ Builder-Anwendung einbettest, sodass deine WebRTC- und ICE-Deployments nicht mehr von Drittanbieter-TURN-Providern oder einer separaten coturn-Installation abhängen. Quotas pro Allocation (max. Allocations pro Benutzer, Bandbreite und Lifetime) begrenzen Missbrauch, wobei OnQuotaExceeded Ablehnungen meldet.