# IAllocation

<a id="iallocation"></a>

# IAllocation

```cpp
#include <icy/turn/iallocation.h>

class IAllocation
```

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

> **Subclassed by:** [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3), [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation)

Base class for TURN relay allocations shared by client and server flows.

All TURN operations revolve around allocations, and all TURN messages are associated with an allocation. An allocation conceptually consists of:

* the relayed transport address;
* the 5-tuple: client's IP address, client's port, server IP address, server port, and transport protocol;
* the authentication information;
* the time-to-expiry;
* a list of permissions;
* a list of channel-to-peer bindings.

The relayed transport address is the transport address allocated by the server for communicating with peers, while the 5-tuple describes the communication path between the client and the server. On the client, the 5-tuple uses the client's host transport address; on the server, the 5-tuple uses the client's server-reflexive transport address.

Both the relayed transport address and the 5-tuple must be unique across all allocations, so either one can be used to uniquely identify the allocation.

The authentication information, such as username, password, realm, and nonce, is used to verify subsequent requests and compute the message integrity of responses. The username, realm, and nonce values are initially those used in the authenticated Allocate request that creates the allocation, though the server can change the nonce during the allocation lifetime using a 438 (Stale Nonce) reply. Rather than storing the password explicitly, a server may prefer to store the key value, which is an MD5 hash over the username, realm, and password as described by RFC 5389.

The time-to-expiry is the time left until the allocation expires. Each Allocate or Refresh transaction resets this timer, which then ticks down toward zero. By default, each Allocate or Refresh resets the lifetime to 600 seconds (10 minutes), but the client can request a different value in the Allocate and Refresh requests. Allocations can only be refreshed using Refresh; sending data to a peer does not refresh an allocation. When an allocation expires, the state data associated with it can be freed.

## Friends

| Name | Description |
|------|-------------|
| [`operator<<`](#operator-224) `inline` |  |

---

<a id="operator-224"></a>

### operator<<

`inline`

```cpp
friend inline std::ostream & operator<<(std::ostream & stream, const IAllocation & alloc)
```

[Defined in src/turn/include/icy/turn/iallocation.h:187](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L187)

## Public Methods

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

---

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

### IAllocation

```cpp
IAllocation(const FiveTuple & tuple = FiveTuple(), const std::string & username = "", std::int64_t lifetime = kDefaultAllocationLifetime)
```

[Defined in src/turn/include/icy/turn/iallocation.h:81](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L81)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `tuple` | const [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple) & | The 5-tuple identifying this allocation. |
| `username` | `const std::string &` | Authenticated username associated with this allocation. |
| `lifetime` | `std::int64_t` | Initial lifetime in seconds. |

---

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

### ~IAllocation

`virtual`

```cpp
virtual ~IAllocation()
```

[Defined in src/turn/include/icy/turn/iallocation.h:84](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L84)

---

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

### IAllocation

```cpp
IAllocation(const IAllocation &) = delete
```

[Defined in src/turn/include/icy/turn/iallocation.h:86](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L86)

Deleted constructor.

---

<a id="operator-225"></a>

### operator=

```cpp
IAllocation & operator=(const IAllocation &) = delete
```

[Defined in src/turn/include/icy/turn/iallocation.h:87](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L87)

Deleted assignment operator.

---

<a id="iallocation-4"></a>

### IAllocation

```cpp
IAllocation(IAllocation &&) = delete
```

[Defined in src/turn/include/icy/turn/iallocation.h:88](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L88)

Deleted constructor.

---

<a id="operator-226"></a>

### operator=

```cpp
IAllocation & operator=(IAllocation &&) = delete
```

[Defined in src/turn/include/icy/turn/iallocation.h:89](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L89)

Deleted assignment operator.

---

<a id="updateusage"></a>

### updateUsage

`virtual`

```cpp
virtual void updateUsage(std::int64_t numBytes = 0)
```

[Defined in src/turn/include/icy/turn/iallocation.h:94](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L94)

Updates the last-activity timestamp and accumulates bandwidth usage. Call this whenever data is relayed through the allocation.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `numBytes` | `std::int64_t` | Number of bytes relayed (0 just refreshes the timestamp). |

---

<a id="setlifetime"></a>

### setLifetime

`virtual`

```cpp
virtual void setLifetime(std::int64_t lifetime)
```

[Defined in src/turn/include/icy/turn/iallocation.h:99](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L99)

Sets the allocation lifetime in seconds and resets the activity timestamp, effectively extending the expiry from the current moment.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `lifetime` | `std::int64_t` | New lifetime in seconds. |

---

<a id="setbandwidthlimit"></a>

### setBandwidthLimit

`virtual`

```cpp
virtual void setBandwidthLimit(std::int64_t numBytes)
```

[Defined in src/turn/include/icy/turn/iallocation.h:104](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L104)

Sets the maximum number of bytes this allocation may relay in its lifetime. Pass 0 to disable bandwidth limiting.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `numBytes` | `std::int64_t` | Bandwidth cap in bytes (0 = unlimited). |

---

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

### expired

`virtual` `const`

```cpp
virtual bool expired() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:108](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L108)

#### Returns
true if the allocation's lifetime has elapsed or the bandwidth quota has been exhausted.

---

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

### deleted

`virtual` `const`

```cpp
virtual bool deleted() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:116](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L116)

Returns true if the allocation's deleted flag is set and or if the allocation has expired.

This signifies that the allocation is ready to be destroyed via async garbage collection. See [Server::onTimer()](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#ontimer-3) and [Client::onTimer()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#ontimer-1)

---

<a id="bandwidthlimit"></a>

### bandwidthLimit

`virtual` `const`

```cpp
virtual std::int64_t bandwidthLimit() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:119](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L119)

#### Returns
The configured bandwidth limit in bytes (0 means unlimited).

---

<a id="bandwidthused"></a>

### bandwidthUsed

`virtual` `const`

```cpp
virtual std::int64_t bandwidthUsed() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:122](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L122)

#### Returns
Total bytes transferred through this allocation since creation.

---

<a id="bandwidthremaining"></a>

### bandwidthRemaining

`virtual` `const`

```cpp
virtual std::int64_t bandwidthRemaining() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:126](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L126)

#### Returns
Bytes remaining before the bandwidth quota is exhausted. Returns a large sentinel value when no limit is configured.

---

<a id="timeremaining"></a>

### timeRemaining

`virtual` `const`

```cpp
virtual std::int64_t timeRemaining() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:129](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L129)

#### Returns
Seconds until the allocation expires (0 if already expired).

#### Reimplemented by

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

---

<a id="tuple"></a>

### tuple

`virtual`

```cpp
virtual FiveTuple & tuple()
```

[Defined in src/turn/include/icy/turn/iallocation.h:132](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L132)

#### Returns
Reference to the 5-tuple identifying this allocation.

---

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

### username

`virtual` `const`

```cpp
virtual std::string username() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:135](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L135)

#### Returns
The username associated with this allocation.

---

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

### lifetime

`virtual` `const`

```cpp
virtual std::int64_t lifetime() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:138](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L138)

#### Returns
The configured lifetime in seconds.

---

<a id="permissions"></a>

### permissions

`virtual` `const`

```cpp
virtual PermissionList permissions() const
```

[Defined in src/turn/include/icy/turn/iallocation.h:141](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L141)

#### Returns
A copy of the current permission list.

---

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

### relayedAddress

`virtual` `const`

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

[Defined in src/turn/include/icy/turn/iallocation.h:144](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L144)

#### Returns
The relay transport address assigned to this allocation.

#### Reimplemented by

- [`TCPAllocation::relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#relayedaddress-2)
- [`UDPAllocation::relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-UDPAllocation.md#relayedaddress-3)
- [`Client::relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#relayedaddress)

---

<a id="addpermission-4"></a>

### addPermission

`virtual`

```cpp
virtual void addPermission(const std::string & ip)
```

[Defined in src/turn/include/icy/turn/iallocation.h:148](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L148)

Adds a permission for `ip`, or refreshes the existing one.

#### Reimplemented by

- [`Client::addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-2)
- [`Client::addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ip` | `const std::string &` | IPv4 address string to permit. |

---

<a id="addpermission-5"></a>

### addPermission

`virtual`

```cpp
virtual void addPermission(const net::Address & address)
```

[Defined in src/turn/include/icy/turn/iallocation.h:152](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L152)

Adds a permission for `address`, or refreshes the existing one. The port is ignored; TURN permissions are IP-only.

#### Reimplemented by

- [`Client::addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-3)

---

<a id="addpermissions"></a>

### addPermissions

`virtual`

```cpp
virtual void addPermissions(const IPList & ips)
```

[Defined in src/turn/include/icy/turn/iallocation.h:156](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L156)

Adds (or refreshes) permissions for multiple IPs.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ips` | const [`IPList`](https://auscaster.com/icey/docs/api-reference/icy-turn.md#iplist) & | List of IPv4 address strings. |

---

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

### removePermission

`virtual`

```cpp
virtual void removePermission(const std::string & ip)
```

[Defined in src/turn/include/icy/turn/iallocation.h:160](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L160)

Removes the permission for `ip` if present.

#### Reimplemented by

- [`Client::removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ip` | `const std::string &` | IPv4 address string to remove. |

---

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

### removePermission

`virtual`

```cpp
virtual void removePermission(const net::Address & address)
```

[Defined in src/turn/include/icy/turn/iallocation.h:164](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L164)

Removes the permission for `address` if present. The port is ignored; TURN permissions are IP-only.

#### Reimplemented by

- [`Client::removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission-1)

---

<a id="removeallpermissions"></a>

### removeAllPermissions

`virtual`

```cpp
virtual void removeAllPermissions()
```

[Defined in src/turn/include/icy/turn/iallocation.h:167](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L167)

Removes all permissions from the list.

---

<a id="removeexpiredpermissions"></a>

### removeExpiredPermissions

`virtual`

```cpp
virtual void removeExpiredPermissions()
```

[Defined in src/turn/include/icy/turn/iallocation.h:170](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L170)

Removes any permissions whose 5-minute lifetime has elapsed.

---

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

### hasPermission

`virtual`

```cpp
virtual bool hasPermission(const std::string & peerIP)
```

[Defined in src/turn/include/icy/turn/iallocation.h:176](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L176)

Checks whether a permission exists for `peerIP`. Local addresses (192.168.x.x and 127.x.x.x) are always permitted. 
#### Returns
true if a valid (non-expired) permission exists.

#### Reimplemented by

- [`Client::hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#haspermission)
- [`ServerAllocation::hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-4)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerIP` | `const std::string &` | IPv4 address string to check. |

---

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

### hasPermission

`virtual`

```cpp
virtual bool hasPermission(const net::Address & peerAddress)
```

[Defined in src/turn/include/icy/turn/iallocation.h:180](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L180)

Checks whether a permission exists for `peerAddress`. The port is ignored; TURN permissions are IP-only.

#### Reimplemented by

- [`Client::hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#haspermission-1)
- [`ServerAllocation::hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#haspermission-5)

---

<a id="print-13"></a>

### print

`virtual` `const` `inline`

```cpp
virtual inline void print(std::ostream & os) const
```

[Defined in src/turn/include/icy/turn/iallocation.h:182](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L182)

#### Reimplemented by

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

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple) | [`_tuple`](#_tuple)  |  |
| `std::string` | [`_username`](#_username-2)  |  |
| [`PermissionList`](https://auscaster.com/icey/docs/api-reference/icy-turn.md#permissionlist) | [`_permissions`](#_permissions)  |  |
| `std::int64_t` | [`_lifetime`](#_lifetime)  |  |
| `std::int64_t` | [`_bandwidthLimit`](#_bandwidthlimit)  |  |
| `std::int64_t` | [`_bandwidthUsed`](#_bandwidthused)  |  |
| `time_t` | [`_createdAt`](#_createdat)  |  |
| `time_t` | [`_updatedAt`](#_updatedat)  |  |
| `bool` | [`_deleted`](#_deleted)  |  |

---

<a id="_tuple"></a>

### _tuple

```cpp
FiveTuple _tuple
```

Type: [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple)

[Defined in src/turn/include/icy/turn/iallocation.h:195](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L195)

---

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

### _username

```cpp
std::string _username
```

[Defined in src/turn/include/icy/turn/iallocation.h:196](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L196)

---

<a id="_permissions"></a>

### _permissions

```cpp
PermissionList _permissions
```

Type: [`PermissionList`](https://auscaster.com/icey/docs/api-reference/icy-turn.md#permissionlist)

[Defined in src/turn/include/icy/turn/iallocation.h:197](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L197)

---

<a id="_lifetime"></a>

### _lifetime

```cpp
std::int64_t _lifetime
```

[Defined in src/turn/include/icy/turn/iallocation.h:198](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L198)

---

<a id="_bandwidthlimit"></a>

### _bandwidthLimit

```cpp
std::int64_t _bandwidthLimit
```

[Defined in src/turn/include/icy/turn/iallocation.h:199](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L199)

---

<a id="_bandwidthused"></a>

### _bandwidthUsed

```cpp
std::int64_t _bandwidthUsed
```

[Defined in src/turn/include/icy/turn/iallocation.h:200](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L200)

---

<a id="_createdat"></a>

### _createdAt

```cpp
time_t _createdAt
```

[Defined in src/turn/include/icy/turn/iallocation.h:201](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L201)

---

<a id="_updatedat"></a>

### _updatedAt

```cpp
time_t _updatedAt
```

[Defined in src/turn/include/icy/turn/iallocation.h:202](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L202)

---

<a id="_deleted"></a>

### _deleted

```cpp
bool _deleted
```

[Defined in src/turn/include/icy/turn/iallocation.h:203](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/iallocation.h#L203)
