TURN-client voor Delphi
Praat met een TURN-server vanuit Delphi/C++Builder. Wijs gerelayde transportadressen toe, beheer permissions en channels en wissel data uit met peers achter symmetric NAT — volgens RFC 8656.
Praat met een TURN-server vanuit Delphi/C++Builder. Wijs gerelayde transportadressen toe, beheer permissions en channels en wissel data uit met peers achter symmetric NAT — volgens RFC 8656.
TURN-client — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, allemaal ondertekend met long-term credentials volgens RFC 8656.
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
Stel de TURN-server in, plaats de credentials op TURNOptions.Authentication, roep Allocate aan en gebruik daarna CreatePermission per peer en SendIndication om data te relayen.
uses
sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
sgcSocket_Classes;
// TFormTURN bevat FClient: TsgcTURNClient en 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));
// de relay stuurt alleen door voor een peer waarvoor je permission hebt gezet
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();
Een getypeerde RFC 8656 TURN-client — de relay-laag voor WebRTC wanneer NAT-traversal met alleen STUN faalt.
Allocate verstuurt het Allocate-request met REQUESTED-TRANSPORT en verkrijgt een gerelayd transportadres, dat binnenkomt in OnTURNAllocate als aAllocation.RelayedIP en RelayedPort. Refresh(lifetime) verlengt de allocation en Refresh(0) dealloceert die.
CreatePermission(peerIp) registreert een peer waarvan de relay datagrammen mag doorsturen. Permissions verlopen automatisch na 5 minuten — ververs ze indien nodig.
ChannelBind(peerIp, peerPort) omzeilt de 36 byte Send/Data-overhead. De component kiest het channel number, codeert de 4 byte ChannelData-header en meldt de binding via OnTURNChannelBind.
TURNOptions.Authentication.Username en Password vullen MESSAGE-INTEGRITY, met het realm en de nonce uit de 401 challenge. Credentials kiest tussen short term en long term.
Transport := stunTCP verplaatst het controlekanaal naar TCP voor netwerken die UDP blokkeren, en dat is het pad uit RFC 6062. TURNOptions.AutoRefresh houdt de allocation, de permissions en de channels daarna vanzelf in leven.
TsgcICEClient stuurt er een aan via zijn TURNClient-eigenschap, en TsgcRTCPeerConnection alloceert vanuit de turn:-items van RTCOptions.ICEServers. De reeks Allocate, CreatePermission en ChannelBind verloopt automatisch.
Direct linken naar de componentreferentie, het kant-en-klare demoproject pakken en de proefversie downloaden.
| Online help — TsgcTURNClient 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 |