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.
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.
Cliente TURN — Allocate, CreatePermission, ChannelBind, Send / Indication / Data, Refresh, tudo assinado com credenciais de longo prazo conforme a RFC 8656.
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
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();
Um cliente TURN RFC 8656 tipado — a camada de relay para WebRTC quando a travessia de NAT apenas com STUN falha.
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(peerIp) registra um peer cujos datagramas o relay vai encaminhar. As permissões expiram automaticamente após 5 minutos — renove conforme necessário.
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.
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.
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.
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ê.
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. | Abrir | |
| Projeto demo — Demos\35.P2P\03.TURN Exemplo pronto para executar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo. | Abrir | |
| 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. | Abrir | |
| Manual do usuário (PDF) Manual completo cobrindo todos os componentes da biblioteca. | Abrir |