Client TURN per Delphi
Comunica con un server TURN da Delphi/C++Builder. Alloca indirizzi di trasporto relayed, gestisci permessi e canali, poi scambia dati con peer dietro NAT simmetrico — secondo RFC 8656.
Comunica con un server TURN da Delphi/C++Builder. Alloca indirizzi di trasporto relayed, gestisci permessi e canali, poi scambia dati con peer dietro NAT simmetrico — secondo RFC 8656.
Client TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tutti firmati con credenziali long-term secondo RFC 8656.
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
Imposta il server TURN, metti le credenziali su TURNOptions.Authentication, chiama Allocate, poi CreatePermission per ogni peer e SendIndication per inoltrare i dati.
uses
sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
sgcSocket_Classes;
// TFormTURN contiene FClient: TsgcTURNClient e 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));
// il relay inoltra solo verso un peer per cui hai creato il permesso
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();
Un client TURN tipizzato RFC 8656 — lo strato di relay per WebRTC quando l'attraversamento NAT con solo STUN fallisce.
Allocate invia la richiesta Allocate con REQUESTED-TRANSPORT e ottiene un indirizzo di trasporto relayed, che arriva su OnTURNAllocate come aAllocation.RelayedIP e RelayedPort. Refresh(lifetime) ne estende la durata e Refresh(0) dealloca.
CreatePermission(peerIp) registra un peer i cui datagrammi il relay inoltrerà. I permessi scadono automaticamente dopo 5 minuti — aggiornali quando serve.
ChannelBind(peerIp, peerPort) aggira l'overhead di 36 byte di Send/Data. Il componente sceglie il numero di canale, codifica l'header ChannelData da 4 byte e riporta il binding su OnTURNChannelBind.
TURNOptions.Authentication.Username e Password popolano MESSAGE-INTEGRITY, usando il realm e il nonce estratti dalla risposta di challenge 401. Credentials seleziona short term o long term.
Transport := stunTCP sposta il canale di controllo su TCP per le reti che bloccano UDP, che è il percorso di RFC 6062. TURNOptions.AutoRefresh poi mantiene in vita da solo l'allocazione, i permessi e i canali.
TsgcICEClient ne pilota uno tramite la sua proprietà TURNClient, e TsgcRTCPeerConnection alloca a partire dalle voci turn: di RTCOptions.ICEServers. La sequenza Allocate, CreatePermission e ChannelBind avviene per te.
Collegamenti diretti al riferimento del componente, al progetto demo pronto all'uso e al download della versione di prova.
| Guida online — TsgcTURNClient Riferimento completo di proprietà, metodi ed eventi di questo componente. | Apri | |
| Progetto demo — Demos\35.P2P\03.TURN Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto. | Apri | |
| Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi e C++ Builder e riferimenti alle fonti primarie — solo per questo componente. | Apri | |
| Manuale utente (PDF) Manuale completo che copre ogni componente della libreria. | Apri |