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.

TsgcTURNClient

Cliente TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, todo firmado con credenciales long-term según RFC 8656.

Clase del componente

TsgcTURNClient

Protocolo

TURN (RFC 8656)

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise

Asigna, da permiso, envía

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();

Qué incluye

Un cliente TURN tipado conforme a RFC 8656 — la capa de relay para WebRTC cuando el NAT traversal solo con STUN falla.

Allocate / Refresh

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

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

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.

Credenciales long-term

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.

TURN sobre TCP

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.

Listo para WebRTC

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.

Especificaciones y referencias

Fuentes autorizadas del protocolo que implementa este componente.

Documentación y demos

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.
Proyecto demo — Demos\35.P2P\03.TURN Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo.
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.
Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para usar TURN desde Delphi?

Descarga la prueba gratuita y añade retransmisión basada en TURN a tus aplicaciones Delphi.