Delphi TURN クライアント
Delphi / C++Builder から TURN サーバーと通信します。リレーされたトランスポートアドレスを割り当て、権限とチャネルを管理し、シンメトリック NAT 配下のピアとデータをやり取りできます。RFC 8656 に準拠しています。
Delphi / C++Builder から TURN サーバーと通信します。リレーされたトランスポートアドレスを割り当て、権限とチャネルを管理し、シンメトリック NAT 配下のピアとデータをやり取りできます。RFC 8656 に準拠しています。
TURN クライアント — Allocate、CreatePermission、ChannelBind、Send / Indication / Data、Refresh のすべてを RFC 8656 に基づく長期認証情報で署名します。
TsgcTURNClient
Windows, macOS, Linux, iOS, Android
Enterprise
TURN サーバーを設定し、認証情報を TURNOptions.Authentication に指定して Allocate を呼び出した後、ピアごとに CreatePermission を実行し、SendIndication でデータをリレーします。
uses
sgcP2P, sgcP2P_STUN_Classes, sgcP2P_STUN_Types, sgcP2P_TURN_Classes,
sgcSocket_Classes;
// TFormTURN は FClient: TsgcTURNClient と 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));
// リレーは、許可を与えたピアに対してのみ転送します
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();
型付きの RFC 8656 TURN クライアントです。STUN のみによる NAT トラバーサルが失敗した場合に、WebRTC のリレー層として機能します。
Allocate は REQUESTED-TRANSPORT を指定して Allocate リクエストを送信し、リレーされたトランスポートアドレスを取得します。アドレスは OnTURNAllocate に aAllocation.RelayedIP と RelayedPort として到達します。Refresh(lifetime) は有効期限を延長し、Refresh(0) は割り当てを解除します。
CreatePermission(peerIp) によって、リレーが転送を許可するピアを登録します。権限は 5 分後に自動的に失効するため、必要に応じて更新してください。
ChannelBind(peerIp, peerPort) を使うと、36 バイトの Send/Data オーバーヘッドを回避できます。コンポーネントがチャネル番号を選択し、4 バイトの ChannelData ヘッダーをエンコードして、バインディングを OnTURNChannelBind で通知します。
TURNOptions.Authentication.Username と Password は、401 チャレンジから取得した realm と nonce を用いて MESSAGE-INTEGRITY を生成します。Credentials で短期か長期かを選択します。
Transport := stunTCP を設定すると、UDP がブロックされるネットワーク向けに制御チャネルを TCP へ移します。これが RFC 6062 の経路です。TURNOptions.AutoRefresh を有効にすれば、割り当て、パーミッション、チャネルは自動的に維持されます。
TsgcICEClient は TURNClient プロパティを通じて TURN クライアントを制御し、TsgcRTCPeerConnection は RTCOptions.ICEServers の turn: エントリから割り当てを行います。Allocate、CreatePermission、ChannelBind の一連の処理は自動的に実行されます。
コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。
| オンラインヘルプ — TsgcTURNClient 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\35.P2P\03.TURN すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。 | 開く | |
| 技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。 | 開く |