TURN-server voor Delphi
Draai je eigen TURN-server (RFC 8656) in Delphi. Wijs gerelayde transportadressen toe aan clients die geen peer-to-peer pad tot stand kunnen brengen, met long-term credentials en quota per allocation.
Draai je eigen TURN-server (RFC 8656) in Delphi. Wijs gerelayde transportadressen toe aan clients die geen peer-to-peer pad tot stand kunnen brengen, met long-term credentials en quota per allocation.
Een self-hosted TURN-server — verwerkt Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, beheert allocations en hun levensduur en valideert long-term credentials.
TsgcTURNServer
Windows, macOS, Linux, iOS, Android
Enterprise
Stel Port in en het realm op TURNOptions.Authentication.LongTermCredentials, lever wachtwoorden per gebruiker via OnSTUNRequestAuthorization, Active := True — je server wijst nu relays toe aan elke RFC 8656-client.
uses
sgcP2P, sgcP2P_STUN_Classes;
// TFormTURNServer bevat FServer: TsgcTURNServer en de 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';
// beperk misbruik: allocations per gebruiker en maximale levensduur
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
// geef het wachtwoord van die gebruiker terug, leeg weigert het verzoek
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;
Een self-hosted relay — zo zijn je WebRTC- en ICE-deployments niet langer afhankelijk van externe TURN-providers.
Honoreert Allocate-requests met REQUESTED-TRANSPORT, kiest een vrije relay-poort en houdt de levensduur bij. Refresh verlengt de allocation; de server breekt hem af bij verloop.
Houdt peer-permissions en channel-bindings per allocation bij. Verwerpt Send/Data-frames voor peers zonder permissie volgens RFC 8656 §9.
Zowel 36 byte Send / Data-envelopes als 4 byte ChannelData-frames worden ondersteund. De relay stuurt datagrammen door tussen het relayed-transport-address en de gebonden peer.
TURNOptions.Authentication.LongTermCredentials bevat het realm, en OnSTUNRequestAuthorization geeft je de username en dat realm door zodat jij het wachtwoord retourneert. De server valideert MESSAGE-INTEGRITY en roteert nonces zelf.
TURNOptions.Allocation.MaxUserAllocations begrenst hoeveel relays één gebruiker krijgt, DefaultLifeTime en MaxLifeTime begrenzen hoe lang elke relay leeft, en MinPort / MaxPort / RelayIP leggen het relay-bereik vast. Een gebruiker boven de limiet krijgt 486 Allocation Quota Reached.
OnTURNBeforeAllocate geeft je het aanvragende adres met een var Reject, en OnTURNBeforeRelayIndication en OnTURNBeforeRelayChannelData doen hetzelfde voor elk gerelayd datagram. OnTURNCreateAllocation en OnTURNDeleteAllocation houden bij welke allocations er leven.
Direct linken naar de componentreferentie, het kant-en-klare demoproject pakken en de proefversie downloaden.
| Online help — TsgcTURNServer Volledige referentie van eigenschappen, methoden en gebeurtenissen voor dit component. | Openen | |
| Demoproject — Demos\35.P2P\03.TURN Kant-en-klaar voorbeeldproject. Zit in het sgcWebSockets-pakket — download hieronder de proefversie. | Openen | |
| Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi & C++ Builder en primaire bronverwijzingen — alleen dit component. | Openen | |
| Gebruikershandleiding (PDF) Uitgebreide handleiding voor elk component in de bibliotheek. | Openen |
Veelgestelde vragen over het draaien van een zelf-gehoste TURN-relay in Delphi en C++ Builder.
TsgcTURNServer component, stel Port en Realm in, lever per-gebruiker wachtwoorden vanuit de OnSTUNRequestAuthorization-event, en zet dan Active := True. De server verwerkt vervolgens Allocate, CreatePermission, ChannelBind, Send, Refresh en Data voor elke RFC 8656-client, en relayt datagrams tussen het relayed transport address en de gebonden peer.TsgcTURNServer is een zelf-gehoste relay die je in je eigen Delphi- of C++ Builder-toepassing inbouwt, zodat je WebRTC- en ICE-deployments niet langer afhankelijk hoeven te zijn van TURN-providers van derden of een aparte coturn-installatie. Quota per allocatie (max. allocaties per gebruiker, bandbreedte en levensduur) begrenzen misbruik, waarbij OnQuotaExceeded afwijzingen rapporteert.