Servidor TURN para Delphi
Ejecuta tu propio servidor TURN (RFC 8656) en Delphi. Asigna direcciones de transporte retransmitidas para clientes que no pueden establecer una ruta peer-to-peer, con credenciales long-term y cuotas por asignación.
Ejecuta tu propio servidor TURN (RFC 8656) en Delphi. Asigna direcciones de transporte retransmitidas para clientes que no pueden establecer una ruta peer-to-peer, con credenciales long-term y cuotas por asignación.
Un servidor TURN autoalojado — procesa Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, gestiona las asignaciones y su duración, valida credenciales long-term.
TsgcTURNServer
Windows, macOS, Linux, iOS, Android
Enterprise
Configura Port y el realm en TURNOptions.Authentication.LongTermCredentials, proporciona contraseñas por usuario mediante OnSTUNRequestAuthorization, Active := True — tu servidor ya asigna relays a cualquier cliente RFC 8656.
uses
sgcP2P, sgcP2P_STUN_Classes;
// TFormTURNServer contiene FServer: TsgcTURNServer y el 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';
// acota el abuso: asignaciones por usuario y duración máxima
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
// devuelve la contraseña de ese usuario, vacía rechaza la petición
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;
Un relay autoalojado — permite que tus despliegues WebRTC e ICE dejen de depender de proveedores TURN externos.
Atiende las peticiones Allocate con REQUESTED-TRANSPORT, elige un puerto de relay libre y controla su duración. Refresh prolonga la asignación; el servidor la elimina al expirar.
Controla los permisos por par y los channel bindings por asignación. Descarta frames Send/Data de pares que no han sido permitidos según RFC 8656 §9.
Se admiten tanto los sobres Send / Data de 36 bytes como los frames ChannelData de 4 bytes. El relay reenvía datagramas entre la dirección de transporte retransmitida y el par enlazado.
TURNOptions.Authentication.LongTermCredentials contiene el realm, y OnSTUNRequestAuthorization te entrega el nombre de usuario y ese realm para que devuelvas la contraseña. El servidor valida MESSAGE-INTEGRITY y rota los nonces automáticamente.
TURNOptions.Allocation.MaxUserAllocations acota cuántos relays obtiene un usuario, DefaultLifeTime y MaxLifeTime acotan cuánto vive cada uno, y MinPort / MaxPort / RelayIP fijan el rango de relay. Un usuario que supere el límite recibe 486 Allocation Quota Reached.
OnTURNBeforeAllocate te entrega la dirección solicitante con un var Reject, y OnTURNBeforeRelayIndication y OnTURNBeforeRelayChannelData hacen lo mismo con cada datagrama retransmitido. OnTURNCreateAllocation y OnTURNDeleteAllocation permiten seguir las que siguen vivas.
Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.
| Ayuda en línea — TsgcTURNServer 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 |
Preguntas habituales sobre la ejecución de un relay TURN autoalojado en Delphi y C++ Builder.
TsgcTURNServer, establece Port y Realm, proporciona las contraseñas por usuario desde el evento OnSTUNRequestAuthorization, y luego pon Active := True. El servidor maneja entonces Allocate, CreatePermission, ChannelBind, Send, Refresh y Data para cualquier cliente RFC 8656, retransmitiendo datagramas entre la dirección de transporte retransmitida y el peer vinculado.TsgcTURNServer es un relay autoalojado que integras en tu propia aplicación Delphi o C++ Builder, de modo que tus despliegues de WebRTC e ICE pueden dejar de depender de proveedores TURN de terceros o de una instalación de coturn separada. Las cuotas por asignación (máximo de asignaciones por usuario, ancho de banda y tiempo de vida) limitan el abuso, con OnQuotaExceeded informando de los rechazos.