Cliente TURN para Delphi
Habla con un servidor TURN desde Delphi/C++Builder. Asigna direcciones de transporte retransmitidas, gestiona permisos y canales, e intercambia datos con pares detrás de NAT simétrico — según RFC 8656.
Habla con un servidor TURN desde Delphi/C++Builder. Asigna direcciones de transporte retransmitidas, gestiona permisos y canales, e intercambia datos con pares detrás de NAT simétrico — según RFC 8656.
Cliente TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, todo firmado con credenciales long-term según RFC 8656.
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
Configura el servidor TURN, pon las credenciales en TURNOptions.Authentication, llama a Allocate y luego CreatePermission por cada par y SendIndication para retransmitir datos.
uses
sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
sgcSocket_Classes;
// TFormTURN contiene FClient: TsgcTURNClient y 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));
// el relay solo reenvía a un par para el que hayas creado permiso
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 cliente TURN tipado conforme a RFC 8656 — la capa de relay para WebRTC cuando el NAT traversal solo con STUN falla.
Allocate envía la petición Allocate con REQUESTED-TRANSPORT y obtiene una dirección de transporte retransmitida, que llega a OnTURNAllocate como aAllocation.RelayedIP y RelayedPort. Refresh(lifetime) la amplía y Refresh(0) la desasigna.
CreatePermission(peerIp) registra un par cuyos datagramas el relay reenviará. Los permisos caducan automáticamente tras 5 minutos — refréscalos según haga falta.
ChannelBind(peerIp, peerPort) evita la sobrecarga de 36 bytes de Send/Data. El componente elige el número de canal, codifica la cabecera de 4 bytes de ChannelData e informa del binding en OnTURNChannelBind.
TURNOptions.Authentication.Username y Password rellenan MESSAGE-INTEGRITY, usando el realm y el nonce extraídos del desafío 401. Credentials selecciona short term o long term.
Transport := stunTCP traslada el canal de control a TCP para redes que bloquean UDP, que es la ruta de RFC 6062. TURNOptions.AutoRefresh mantiene entonces vivas por sí solo la asignación, los permisos y los canales.
TsgcICEClient maneja uno a través de su propiedad TURNClient, y TsgcRTCPeerConnection asigna a partir de las entradas turn: de RTCOptions.ICEServers. La secuencia Allocate, CreatePermission y ChannelBind ocurre por ti.
Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.
| Ayuda en línea — TsgcTURNClient Referencia completa de propiedades, métodos y eventos de este componente. | Abrir | |
| Proyecto demo — Demos\35.P2P\03.TURN Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo. | Abrir | |
| Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias a fuentes primarias — solo este componente. | Abrir | |
| Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca. | Abrir |