TsgcTURNServer › Events › OnTURNBeforeAllocate
新しいアロケーションが作成される前に発火します。リレー IP/ポートを検査し、Reject を設定して ALLOCATE リクエストを拒否できます。
property OnTURNBeforeAllocate: TsgcTURNBeforeAllocateEvent;
// TsgcTURNBeforeAllocateEvent = procedure(Sender: TObject; const aSocket: TsgcSocketConnection; const aIP: String; aPort: Word; var Reject: Boolean) of object
—
ALLOCATE リクエストの処理中に、リレーソケットが予約された後、Allocation オブジェクトが内部テーブルに追加される前に発生します。aIP/aPort は、サーバーが XOR-RELAYED-ADDRESS でアドバタイズしようとしているリレー済みトランスポートアドレスを保持します。IP は TURNOptions.Allocation.RelayIP(または空の場合は Host)から、ポートは Allocation.MinPort〜MaxPort 範囲から取得されます。このイベントを使用して、アプリケーションレベルのクォータを適用したり、特定のクライアントやピアポートをブロックしたり、割り当てリクエストを監査したりできます。Reject := True を設定すると ALLOCATE を拒否します。サーバーはリレーポートを解放してエラーレスポンス(486 Allocation Quota Reached)を返します。Reject を False のままにすると Allocation が作成され、続く OnTURNCreateAllocation イベントで成功が確認されます。NotifyEvents でリダイレクトされない限り、リスナースレッドで実行されます。
procedure TForm1.OnTURNBeforeAllocate(Sender: TObject;
const aSocket: TsgcSocketConnection; const aIP: String; aPort: Word;
var Reject: Boolean);
begin
Memo1.Lines.Add(Format('Allocate %s:%d for %s', [aIP, aPort, aSocket.PeerIP]));
Reject := BlackList.Contains(aSocket.PeerIP);
end;