Servidor TURN | Asignaciones

Todas las operaciones TURN giran en torno a las asignaciones y todos los mensajes TURN están asociados a una Asignación. Una asignación consiste en:

 

 

Cuando un cliente TURN envía una solicitud Allocate, este mensaje TURN es procesado por el servidor e intenta crear una nueva dirección de transporte retransmitida. Por defecto, si hay algún puerto UDP disponible, se creará una nueva dirección retransmitida, pero puede usar el evento OnTURNBeforeAllocate para rechazar una nueva solicitud de asignación.

 


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;

Si el proceso continúa, el servidor crea una nueva asignación y se llama al evento OnTURNCreateAllocation. Este evento proporciona información sobre la Asignación a través de la clase TsgcTURNAllocationItem.

 


procedure OnTURNCreateAllocation(Sender: TObject; const aSocket: TsgcSocketConnection; 
  const Allocation: TsgcTURNAllocationItem);
begin
  DoLog('New Allocation: ' + Allocation.RelayIP + ':' + IntToStr(Allocation.RelayPort));
end;

 

Cuando la asignación expira o se elimina al recibir una solicitud de actualización del cliente con una duración de vida de cero, se activa el evento OnTURNDeleteAllocation.

 


procedure OnTURNDeleteAllocation(Sender: TObject; const aSocket: TsgcSocketConnection; 
  const Allocation: TsgcTURNAllocationItem);
begin
  DoLog('Allocation Deleted: ' + Allocation.RelayIP + ':' + IntToStr(Allocation.RelayPort));
end;