Servidor TURN para Delphi

Execute seu próprio servidor TURN (RFC 8656) em Delphi. Aloque endereços de transporte retransmitidos para clientes que não conseguem estabelecer um caminho peer-to-peer, com credenciais de longo prazo e cotas por alocação.

TsgcTURNServer

Um servidor TURN self-hosted — processa Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, gerencia as alocações e o tempo de vida delas, valida credenciais de longo prazo.

Classe do componente

TsgcTURNServer

Protocolo

TURN (RFC 8656)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise

Descartar, definir o realm, fornecer credenciais

Defina Port e o realm em TURNOptions.Authentication.LongTermCredentials, forneça as senhas por usuário via OnSTUNRequestAuthorization, Active := True — o seu servidor agora aloca relays para qualquer cliente RFC 8656.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer mantém FServer: TsgcTURNServer e o 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';

  // limite o abuso: alocações por usuário e tempo de vida máximo
  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
  // retorne a senha desse usuário, vazio rejeita a requisição
  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;

O que tem por dentro

Um relay auto-hospedado que permite às suas implantações WebRTC e ICE deixarem de depender de provedores TURN de terceiros.

Allocate / Refresh / Free

Atende às requisições Allocate com REQUESTED-TRANSPORT, escolhe uma porta de relay livre e acompanha o tempo de vida. Refresh estende a alocação; o servidor a encerra ao expirar.

CreatePermission / ChannelBind

Acompanha as permissões de peers e os channel bindings por alocação. Descarta frames Send/Data de peers sem permissão, conforme a RFC 8656 §9.

Send / Data / ChannelData

Há suporte tanto a envelopes Send / Data de 36 bytes quanto a frames ChannelData de 4 bytes. O relay encaminha datagramas entre o relayed-transport-address e o peer vinculado.

Credenciais de longo prazo

TURNOptions.Authentication.LongTermCredentials carrega o realm, e OnSTUNRequestAuthorization expõe o username e esse realm para que você retorne a senha. O servidor valida o MESSAGE-INTEGRITY e faz a rotação dos nonces por conta própria.

Cotas e portas de relay

TURNOptions.Allocation.MaxUserAllocations limita quantos relays um usuário obtém, DefaultLifeTime e MaxLifeTime limitam quanto tempo cada um vive, e MinPort / MaxPort / RelayIP fixam a faixa de relay. Um usuário acima do limite recebe 486 Allocation Quota Reached.

Avalie cada alocação

OnTURNBeforeAllocate lhe entrega o endereço solicitante com um var Reject, e OnTURNBeforeRelayIndication e OnTURNBeforeRelayChannelData fazem o mesmo para cada datagrama repassado. OnTURNCreateAllocation e OnTURNDeleteAllocation acompanham as que continuam ativas.

Especificações & referências

Fontes oficiais do protocolo que este componente implementa.

Documentação & Demos

Acesse a referência do componente, pegue o projeto demo pronto para executar e baixe a versão de avaliação.

Ajuda online — TsgcTURNServer Referência completa de propriedades, métodos e eventos deste componente.
Projeto demo — Demos\35.P2P\03.TURN Exemplo pronto para executar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Documento técnico (PDF) Recursos, início rápido, exemplos de código para Delphi & C++ Builder e referências de fontes primárias — somente deste componente.
Manual do usuário (PDF) Manual completo cobrindo todos os componentes da biblioteca.

Perguntas frequentes sobre o servidor TURN

Dúvidas comuns sobre executar um relay TURN auto-hospedado em Delphi e C++ Builder.

Coloque um componente TsgcTURNServer, defina Port e Realm, forneça senhas por usuário a partir do evento OnSTUNRequestAuthorization e, em seguida, defina Active := True. O servidor então trata Allocate, CreatePermission, ChannelBind, Send, Refresh e Data para qualquer client RFC 8656, retransmitindo datagramas entre o endereço de transporte retransmitido e o peer vinculado.
Ele implementa TURN conforme a RFC 8656, validando credenciais de longo prazo com MESSAGE-INTEGRITY e rotacionando nonces automaticamente. Ele também referencia a RFC 6062 para alocações TURN sobre TCP e a RFC 8489 para o formato de mensagem STUN subjacente, e suporta transportes UDP, TCP e TLS sobre TCP.
Não. TsgcTURNServer é um relay auto-hospedado que você incorpora no seu próprio aplicativo Delphi ou C++ Builder, de modo que suas implantações WebRTC e ICE podem deixar de depender de provedores TURN de terceiros ou de uma instalação coturn separada. Cotas por alocação (máximo de alocações por usuário, largura de banda e tempo de vida) limitam o abuso, com OnQuotaExceeded reportando as rejeições.
O servidor TURN faz parte da edição Enterprise do sgcWebSockets e suporta do Delphi 7 até o mais recente lançamento do Delphi e as versões correspondentes do C++ Builder, no Windows, macOS, Linux, iOS e Android. Baixe a versão de avaliação gratuita para colocar de pé um relay TURN no seu próprio projeto.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para executar seu próprio servidor TURN?

Baixe a versão de avaliação gratuita e coloque um relay TURN no ar em Delphi.