Cliente TURN para Delphi

Converse com um servidor TURN a partir do Delphi/C++Builder. Aloque endereços de transporte de relay, gerencie permissões e canais e troque dados com peers atrás de NAT simétrico — conforme a RFC 8656.

TsgcTURNClient

Cliente TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tudo assinado com credenciais de longo prazo conforme a RFC 8656.

Classe do componente

TsgcTURNClient

Protocolo

TURN (RFC 8656)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise

Alocar, permissão, enviar

Defina o servidor TURN, coloque as credenciais em TURNOptions.Authentication, chame Allocate, depois CreatePermission para cada peer e SendIndication para fazer relay dos dados.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
  sgcSocket_Classes;

// TFormTURN mantém 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));

  // o relay só encaminha para um peer que você tenha autorizado
  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();

O que tem por dentro

Um cliente TURN RFC 8656 tipado — a camada de relay para WebRTC quando a travessia de NAT apenas com STUN falha.

Allocate / Refresh

Allocate envia a requisição Allocate com REQUESTED-TRANSPORT e obtém um endereço de transporte de relay, que chega em OnTURNAllocate como aAllocation.RelayedIP e RelayedPort. Refresh(lifetime) o estende e Refresh(0) desaloca.

CreatePermission

CreatePermission(peerIp) registra um peer cujos datagramas o relay vai encaminhar. As permissões expiram automaticamente após 5 minutos — renove conforme necessário.

ChannelBind

ChannelBind(peerIp, peerPort) evita o overhead de 36 bytes do Send/Data. O componente escolhe o número do canal, codifica o cabeçalho ChannelData de 4 bytes e informa o binding em OnTURNChannelBind.

Credenciais de longo prazo

TURNOptions.Authentication.Username e Password alimentam o MESSAGE-INTEGRITY, usando o realm e o nonce extraídos do desafio 401. Credentials seleciona curto ou longo prazo.

TURN sobre TCP

Transport := stunTCP move o canal de controle para TCP em redes que bloqueiam UDP, que é o caminho da RFC 6062. TURNOptions.AutoRefresh então mantém vivas a alocação, as permissões e os canais por conta própria.

Pronto para WebRTC

TsgcICEClient conduz um deles pela sua propriedade TURNClient, e TsgcRTCPeerConnection aloca a partir das entradas turn: de RTCOptions.ICEServers. A sequência Allocate, CreatePermission e ChannelBind acontece por você.

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 — TsgcTURNClient 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.
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 usar o TURN em Delphi?

Baixe a versão de avaliação e adicione relay baseado em TURN às suas aplicações Delphi.