Tüm TURN işlemleri tahsisler etrafında döner ve tüm TURN mesajları bir Allocation ile ilişkilendirilir. Bir tahsis şunlardan oluşur:
Bir TURN istemcisi bir Allocate isteği gönderdiğinde, bu TURN mesajı sunucu tarafından işlenir ve yeni bir Relayed Transport Address oluşturmaya çalışır. Varsayılan olarak, kullanılabilir herhangi bir UDP portu varsa, yeni bir Relayed Address oluşturur, ancak yeni bir Allocation isteğini reddetmek için OnTURNBeforeAllocate olayını kullanabilirsiniz.
procedure OnTURNBeforeAllocate(Sender: TObject; const aSocket: TsgcSocketConnection;
const aIP: string; aPort: Word; var Reject: Boolean);
begin
if not (your own rules) then
Reject := false;
end;
İşlem devam ederse, sunucu yeni bir allocation oluşturur ve OnTURNCreateAllocation olayı çağrılır. Bu olay, TsgcTURNAllocationItem sınıfı aracılığıyla Allocation hakkında bilgi sağlar.
procedure OnTURNCreateAllocation(Sender: TObject; const aSocket: TsgcSocketConnection;
const Allocation: TsgcTURNAllocationItem);
begin
DoLog('New Allocation: ' + Allocation.RelayIP + ':' + IntToStr(Allocation.RelayPort));
end;
Allocation süresi dolduğunda veya istemciden sıfır ömürlü bir Refresh Request alarak silindiğinde, OnTURNDeleteAllocation olayı tetiklenir.
procedure OnTURNDeleteAllocation(Sender: TObject; const aSocket: TsgcSocketConnection;
const Allocation: TsgcTURNAllocationItem);
begin
DoLog('Allocation Deleted: ' + Allocation.RelayIP + ':' + IntToStr(Allocation.RelayPort));
end;