TURN クライアント

Delphi / C++Builder から TURN サーバーと通信します。リレーされたトランスポートアドレスを割り当て、権限とチャネルを管理し、シンメトリック NAT 配下のピアとデータをやり取りできます。RFC 8656 に準拠しています。

TsgcTURNClient

TURN クライアント — Allocate、CreatePermission、ChannelBind、Send / Indication / Data、Refresh のすべてを RFC 8656 に基づく長期認証情報で署名します。

コンポーネントクラス

TsgcTURNClient

プロトコル

TURN (RFC 8656)

プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Professional / Enterprise

Allocate、Permission、Send

TURN サーバー / ユーザー名 / パスワードを設定し、Allocate を呼び出した後、ピアごとに CreatePermission を実行し、Send / SendIndication でデータをリレーします。

uses
  sgcP2P;

var
  TURN: TsgcTURNClient;
begin
  TURN := TsgcTURNClient.Create(nil);
  TURN.Host := 'turn.example.com';
  TURN.Port := 3478;
  TURN.Authentication.UserName := 'alice';
  TURN.Authentication.Password := 'secret';

  TURN.OnTURNAllocated := procedure(Sender: TObject;
    const aRelayedAddress, aRelayedPort: string)
  begin
    Memo1.Lines.Add('relay: ' + aRelayedAddress + ':' + aRelayedPort);
    TURN.CreatePermission('192.0.2.1');
    TURN.SendIndication('192.0.2.1', 5000, 'hello via TURN');
  end;

  TURN.Allocate;
end;
// uses: sgcP2P
TsgcTURNClient *TURN = new TsgcTURNClient(this);
TURN->Host = "turn.example.com";
TURN->Port = 3478;
TURN->Authentication->UserName = "alice";
TURN->Authentication->Password = "secret";
TURN->Allocate();

主な機能

型付きの RFC 8656 TURN クライアントです。STUN のみによる NAT トラバーサルが失敗した場合に、WebRTC のリレー層として機能します。

Allocate / Refresh

Allocate は REQUESTED-TRANSPORT (UDP、TCP) を指定して Allocate リクエストを送信し、リレーされたトランスポートアドレスを取得します。Refresh は有効期限を延長し、Free は明示的に割り当てを解除します。

CreatePermission

CreatePermission(peerIp) によって、リレーが転送を許可するピアを登録します。権限は 5 分後に自動的に失効するため、必要に応じて更新してください。

ChannelBind

ChannelBind(channelNumber, peerEndpoint) によって 36 バイトの Send/Data オーバーヘッドを回避できます。コンポーネントは 4 バイトの ChannelData ヘッダーを自動的にエンコードします。

長期認証情報

Authentication.UserName / Password は、401 チャレンジから抽出した realm と nonce を用いて MESSAGE-INTEGRITY を生成します。

TCP / TLS 上の TURN

UDP がブロックされる環境では、基底クライアントの Transport を TCP または TLS に設定します。RFC 6062 / 6056 のトランスポート選択に対応しています。

WebRTC 対応

TsgcRTCPeerConnectionTsgcTURNClient を IceServers の 1 つとして利用します。Allocate、CreatePermission、ChannelBind の一連の処理は透過的に実行されます。

仕様と参考資料

このコンポーネントが実装するプロトコルの一次資料です。

ドキュメントとデモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。

オンラインヘルプ — TsgcTURNClient 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\35.P2P\03.TURN すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。
技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。

Delphi から TURN を利用しませんか?

体験版をダウンロードして、Delphi アプリケーションに TURN ベースのリレー機能を追加しましょう。