# UDPAllocation

<a id="udpallocation"></a>

# UDPAllocation

```cpp
#include <icy/turn/server/udpallocation.h>

class UDPAllocation
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:31](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L31)

> **Inherits:** [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation)

Server-side UDP TURN allocation that relays datagrams to permitted peers. Binds a dedicated UDP relay socket for peer communication and forwards incoming datagrams to the client as Data Indications.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`UDPAllocation`](#udpallocation-1) | `function` | Declared here |
| [`~UDPAllocation`](#udpallocation-2) | `function` | Declared here |
| [`onPeerDataReceived`](#onpeerdatareceived-1) | `function` | Declared here |
| [`handleRequest`](#handlerequest-3) | `function` | Declared here |
| [`handleSendIndication`](#handlesendindication) | `function` | Declared here |
| [`send`](#send-17) | `function` | Declared here |
| [`relayedAddress`](#relayedaddress-3) | `function` | Declared here |
| [`_relaySocket`](#_relaysocket) | `variable` | Declared here |
| [`Server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#server-10) | `friend` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-1) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`~ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-2) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`handleRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerequest-1) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`handleRefreshRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerefreshrequest) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`handleCreatePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlecreatepermission) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#ontimer-4) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`timeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#timeremaining-1) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`maxTimeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#maxtimeremaining) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-4) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-5) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#server-11) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`print`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#print-14) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`refreshDeleteRequested`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#refreshdeleterequested) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`_maxLifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_maxlifetime) | `variable` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`_server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_server-1) | `variable` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`_permissionPolicy`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_permissionpolicy) | `variable` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`_refreshDeleteRequested`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_refreshdeleterequested) | `variable` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-3) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#operator-228) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-4) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#operator-229) | `function` | Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) |
| [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-224) | `friend` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-1) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`~IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-2) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-3) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-225) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-4) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-226) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`updateUsage`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#updateusage) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`setLifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#setlifetime) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`setBandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#setbandwidthlimit) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`expired`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#expired-1) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`deleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#deleted-1) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`bandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthlimit) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`bandwidthUsed`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthused) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`bandwidthRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthremaining) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`timeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#timeremaining) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`tuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#tuple) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`username`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#username-3) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`lifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#lifetime-1) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`permissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#permissions) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#relayedaddress-1) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermission-4) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermission-5) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`addPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermissions) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removepermission-2) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removepermission-3) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`removeAllPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removeallpermissions) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`removeExpiredPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removeexpiredpermissions) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#haspermission-2) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#haspermission-3) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`print`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#print-13) | `function` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_tuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_tuple) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_username`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_username-2) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_permissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_permissions) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_lifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_lifetime) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_bandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_bandwidthlimit) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_bandwidthUsed`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_bandwidthused) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_createdAt`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_createdat) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_updatedAt`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_updatedat) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |
| [`_deleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_deleted) | `variable` | Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) |

## Inherited from [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation)

| Kind | Name | Description |
|------|------|-------------|
| `friend` | [`Server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#server-10)  |  |
| `function` | [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-1)  |  |
| `function` | [`~ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-2) `virtual` |  |
| `function` | [`handleRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerequest-1) `virtual` | Dispatches incoming STUN requests to [handleCreatePermission()](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlecreatepermission) or [handleRefreshRequest()](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerefreshrequest). Subclasses override to add transport-specific methods. |
| `function` | [`handleRefreshRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerefreshrequest) `virtual` | Processes a Refresh request; updates the lifetime or sets the delete flag if the requested lifetime is 0, then sends a success response. |
| `function` | [`handleCreatePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlecreatepermission) `virtual` | Processes a CreatePermission request; installs or refreshes permissions for each XOR-PEER-ADDRESS attribute, then sends a success response. |
| `function` | [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#ontimer-4)  | Periodic maintenance callback called by [Server::onTimer()](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#ontimer-3). Removes expired permissions. Returns false to signal that this allocation should be destroyed. |
| `function` | [`timeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#timeremaining-1) `virtual` `const` `override` |  |
| `function` | [`maxTimeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#maxtimeremaining) `const` |  |
| `function` | [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-4) `virtual` `override` | Checks permission, auto-granting local IPs if enabled in server options. |
| `function` | [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-5) `virtual` `override` | Checks whether a permission exists for `peerAddress`. The port is ignored; TURN permissions are IP-only. |
| `function` | [`server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#server-11) `virtual` |  |
| `function` | [`print`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#print-14) `virtual` `const` `override` | Writes a detailed diagnostic dump of this allocation to `os`. |
| `function` | [`refreshDeleteRequested`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#refreshdeleterequested) `const` `inline` | Returns true if the refresh request set lifetime to 0, signaling the parent [Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) to delete this allocation. |
| `variable` | [`_maxLifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_maxlifetime)  |  |
| `variable` | [`_server`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_server-1)  |  |
| `variable` | [`_permissionPolicy`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_permissionpolicy)  |  |
| `variable` | [`_refreshDeleteRequested`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#_refreshdeleterequested)  |  |
| `function` | [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-3)  | NonCopyable and NonMovable. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#operator-228)  | Deleted assignment operator. |
| `function` | [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#operator-229)  | Deleted assignment operator. |

## Inherited from [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation)

| Kind | Name | Description |
|------|------|-------------|
| `friend` | [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-224) `inline` |  |
| `function` | [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-1)  |  |
| `function` | [`~IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-2) `virtual` |  |
| `function` | [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-225)  | Deleted assignment operator. |
| `function` | [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#operator-226)  | Deleted assignment operator. |
| `function` | [`updateUsage`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#updateusage) `virtual` | Updates the last-activity timestamp and accumulates bandwidth usage. Call this whenever data is relayed through the allocation. |
| `function` | [`setLifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#setlifetime) `virtual` | Sets the allocation lifetime in seconds and resets the activity timestamp, effectively extending the expiry from the current moment. |
| `function` | [`setBandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#setbandwidthlimit) `virtual` | Sets the maximum number of bytes this allocation may relay in its lifetime. Pass 0 to disable bandwidth limiting. |
| `function` | [`expired`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#expired-1) `virtual` `const` |  |
| `function` | [`deleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#deleted-1) `virtual` `const` | Returns true if the allocation's deleted flag is set and or if the allocation has expired. |
| `function` | [`bandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthlimit) `virtual` `const` |  |
| `function` | [`bandwidthUsed`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthused) `virtual` `const` |  |
| `function` | [`bandwidthRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#bandwidthremaining) `virtual` `const` |  |
| `function` | [`timeRemaining`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#timeremaining) `virtual` `const` |  |
| `function` | [`tuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#tuple) `virtual` |  |
| `function` | [`username`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#username-3) `virtual` `const` |  |
| `function` | [`lifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#lifetime-1) `virtual` `const` |  |
| `function` | [`permissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#permissions) `virtual` `const` |  |
| `function` | [`relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#relayedaddress-1) `virtual` `const` |  |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermission-4) `virtual` | Adds a permission for `ip`, or refreshes the existing one. |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermission-5) `virtual` | Adds a permission for `address`, or refreshes the existing one. The port is ignored; TURN permissions are IP-only. |
| `function` | [`addPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#addpermissions) `virtual` | Adds (or refreshes) permissions for multiple IPs. |
| `function` | [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removepermission-2) `virtual` | Removes the permission for `ip` if present. |
| `function` | [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removepermission-3) `virtual` | Removes the permission for `address` if present. The port is ignored; TURN permissions are IP-only. |
| `function` | [`removeAllPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removeallpermissions) `virtual` | Removes all permissions from the list. |
| `function` | [`removeExpiredPermissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#removeexpiredpermissions) `virtual` | Removes any permissions whose 5-minute lifetime has elapsed. |
| `function` | [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#haspermission-2) `virtual` | Checks whether a permission exists for `peerIP`. Local addresses (192.168.x.x and 127.x.x.x) are always permitted. |
| `function` | [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#haspermission-3) `virtual` | Checks whether a permission exists for `peerAddress`. The port is ignored; TURN permissions are IP-only. |
| `function` | [`print`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#print-13) `virtual` `const` `inline` |  |
| `variable` | [`_tuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_tuple)  |  |
| `variable` | [`_username`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_username-2)  |  |
| `variable` | [`_permissions`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_permissions)  |  |
| `variable` | [`_lifetime`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_lifetime)  |  |
| `variable` | [`_bandwidthLimit`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_bandwidthlimit)  |  |
| `variable` | [`_bandwidthUsed`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_bandwidthused)  |  |
| `variable` | [`_createdAt`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_createdat)  |  |
| `variable` | [`_updatedAt`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_updatedat)  |  |
| `variable` | [`_deleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#_deleted)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`UDPAllocation`](#udpallocation-1)  | Binds the relay UDP socket and registers the peer receive callback. |
|  | [`~UDPAllocation`](#udpallocation-2) `virtual` |  |
| `bool` | [`onPeerDataReceived`](#onpeerdatareceived-1)  | Receive callback for the relay UDP socket; validates permissions, updates bandwidth usage, and forwards data to the client as a Data Indication. |
| `bool` | [`handleRequest`](#handlerequest-3) `virtual` | Extends the base handler with Send Indication support. |
| `void` | [`handleSendIndication`](#handlesendindication)  | Handles a Send Indication from the client; validates permissions and relays the DATA attribute payload to the peer via the relay socket. Silently discards on permission or attribute errors. |
| `ssize_t` | [`send`](#send-17)  | Sends raw data to `peerAddress` via the relay UDP socket. Updates bandwidth usage and returns -1 if the allocation is expired. |
| [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) | [`relayedAddress`](#relayedaddress-3) `virtual` `const` |  |

---

<a id="udpallocation-1"></a>

### UDPAllocation

```cpp
UDPAllocation(Server & server, const FiveTuple & tuple, const std::string & username, const uint32_t & lifetime)
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:39](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L39)

Binds the relay UDP socket and registers the peer receive callback.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `server` | [`Server`](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) & | Owning TURN server. |
| `tuple` | const [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple) & | 5-tuple identifying this allocation. |
| `username` | `const std::string &` | Authenticated username from the Allocate request. |
| `lifetime` | `const uint32_t &` | Initial lifetime in seconds. |

---

<a id="udpallocation-2"></a>

### ~UDPAllocation

`virtual`

```cpp
virtual ~UDPAllocation()
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:41](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L41)

---

<a id="onpeerdatareceived-1"></a>

### onPeerDataReceived

```cpp
bool onPeerDataReceived(net::Socket & socket, const MutableBuffer & buffer, const net::Address & peerAddress)
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:48](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L48)

Receive callback for the relay UDP socket; validates permissions, updates bandwidth usage, and forwards data to the client as a Data Indication.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The relay socket. |
| `buffer` | const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) & | Received datagram. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Source address of the peer datagram. |

---

<a id="handlerequest-3"></a>

### handleRequest

`virtual`

```cpp
virtual bool handleRequest(Request & request)
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:54](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L54)

Extends the base handler with Send Indication support. 
#### Returns
true if handled.

#### Reimplements

- [`ServerAllocation::handleRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#handlerequest-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | [`Request`](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) & | Incoming STUN request or indication. |

---

<a id="handlesendindication"></a>

### handleSendIndication

```cpp
void handleSendIndication(Request & request)
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:60](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L60)

Handles a Send Indication from the client; validates permissions and relays the DATA attribute payload to the peer via the relay socket. Silently discards on permission or attribute errors.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | [`Request`](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) & | Incoming Send Indication. |

---

<a id="send-17"></a>

### send

```cpp
ssize_t send(const char * data, size_t size, const net::Address & peerAddress)
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:68](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L68)

Sends raw data to `peerAddress` via the relay UDP socket. Updates bandwidth usage and returns -1 if the allocation is expired. 
#### Returns
Number of bytes sent, or -1 if the quota is exhausted.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `data` | `const char *` | Payload bytes to relay. |
| `size` | `size_t` | Number of bytes. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Destination peer address. |

---

<a id="relayedaddress-3"></a>

### relayedAddress

`virtual` `const`

```cpp
virtual net::Address relayedAddress() const
```

[Defined in src/turn/include/icy/turn/server/udpallocation.h:72](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L72)

#### Returns
The bound address of the relay UDP socket.

#### Reimplements

- [`IAllocation::relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#relayedaddress-1)

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter) | [`_relaySocket`](#_relaysocket)  |  |

---

<a id="_relaysocket"></a>

### _relaySocket

```cpp
net::SocketEmitter _relaySocket
```

Type: [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter)

[Defined in src/turn/include/icy/turn/server/udpallocation.h:75](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/udpallocation.h#L75)
