TsgcTURNServer › Events › OnTURNBeforeAllocate
在创建新分配之前触发;检查中继 IP/端口并将 Reject 设为 True 以拒绝 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;