Delphi STUN サーバー
Delphi で独自の STUN (RFC 8489) サーバーを運用できます。バインディングリクエストに対し、正規の XOR-MAPPED-ADDRESS で応答します。プライベートネットワーク、オンプレミス環境、ICE ブートストラップで活用いただけます。
Delphi で独自の STUN (RFC 8489) サーバーを運用できます。バインディングリクエストに対し、正規の XOR-MAPPED-ADDRESS で応答します。プライベートネットワーク、オンプレミス環境、ICE ブートストラップで活用いただけます。
型付きの RFC 8489 STUN サーバーです。Binding / Indication メッセージを処理し、XOR-MAPPED-ADDRESS で応答します。長期間認証用に MESSAGE-INTEGRITY を強制することも可能です。
TsgcSTUNServer
Windows, macOS, Linux, iOS, Android
Professional / Enterprise
Port (デフォルト 3478) を設定し、Active := True にするだけで、サーバーは Binding リクエストに対し正規の RFC 8489 XOR-MAPPED-ADDRESS で応答します。
uses
sgcP2P, sgcP2P_STUN_Classes;
// TFormSTUNServer は FServer: TsgcSTUNServer とハンドラーを保持します
procedure TFormSTUNServer.StartServer;
begin
FServer := TsgcSTUNServer.Create(nil);
FServer.Port := 3478;
// オプション: 長期認証情報
FServer.STUNOptions.Authentication.Enabled := True;
FServer.STUNOptions.Authentication.LongTermCredentials.Enabled := True;
FServer.STUNOptions.Authentication.LongTermCredentials.Realm :=
'example.com';
FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;
FServer.Active := True;
end;
procedure TFormSTUNServer.OnSTUNRequestAuthorization(Sender: TObject;
const aRequest: TsgcSTUN_Message;
const aUsername, aRealm: string;
var Password: string);
begin
// そのユーザーのパスワードを返します。空文字はリクエストを拒否します
Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcSTUNServer *Server = new TsgcSTUNServer(this);
Server->Port = 3478;
Server->STUNOptions->Authentication->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Realm = "example.com";
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;
セルフホスト型の STUN サーバー。オンプレミスの WebRTC 環境やプライベートクラウドでのテストに最適です。
受信した Binding リクエストには XOR-MAPPED-ADDRESS、MAPPED-ADDRESS (レガシー)、FINGERPRINT を付与して応答し、RFC 8489 標準の応答形式に準拠します。
STUNOptions.Authentication.Enabled を切り替えると MESSAGE-INTEGRITY を必須化でき、realm は LongTermCredentials.Realm で設定します。OnSTUNRequestAuthorization ではユーザー名と realm が渡されるため、対応するパスワードを返却します。
STUNOptions.BindingAttributes では、従来の RFC 3489 MAPPED-ADDRESS、OTHER-ADDRESS、RESPONSE-ORIGIN、SOURCE-ADDRESS のオンとオフを切り替えられます。AlternateServer を設定すると、指定したサーバーを示す 300 Try Alternate を返します。
IPVersion によって、いずれかのファミリまたはデュアルスタックでバインドできます。XOR-MAPPED-ADDRESS の応答は受信トランスポートのファミリに合わせて生成されます。
LongTermCredentials.StaleNonce は nonce の有効期間を設定します。期限が切れると、サーバーは新しい nonce とともに 438 Stale Nonce を返します。これは RFC 8489 §9.2 が求める動作です。
OnSTUNRequestSuccess と OnSTUNRequestError では、リクエストと、サーバーが送信しようとしているレスポンスが渡され、var Accept をクリアできます。LogFile は生のやり取りをディスクに書き出します。
コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。
| オンラインヘルプ — TsgcSTUNServer 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\35.P2P\02.STUN すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。 | 開く | |
| 技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。 | 開く |
Delphi および C++ Builder でセルフホスト型 STUN サーバーを運用することに関するよくある質問です。
TsgcSTUNServer コンポーネントを配置し、Port(デフォルトは 3478)を設定して Active := True を設定します。すると、サーバーは受信した Binding リクエストに対し、正規の XOR-MAPPED-ADDRESS で応答します。必要に応じて Authentication を有効にし、OnSTUNRequestAuthorization を処理して、長期認証情報による MESSAGE-INTEGRITY を要求できます。TsgcSTUNServer は、ご自身の Delphi または C++ Builder アプリケーションに直接組み込めるセルフホスト型 STUN サーバーなので、別途 coturn インスタンスをデプロイして運用する必要はありません。プライベートネットワーク、オンプレミスの WebRTC 環境、ご自身の管理下での ICE ブートストラップに最適です。