# Permission

<a id="permission"></a>

# Permission

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

struct Permission
```

[Defined in src/turn/include/icy/turn/permission.h:37](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/permission.h#L37)

A single TURN permission entry associating a peer IP with a 5-minute expiry timer. Per RFC 5766 section 8, permissions last exactly 300 seconds and must be refreshed via a new CreatePermission request before they expire.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::string` | [`ip`](#ip)  | IPv4 address string of the permitted peer. |
| [`Key`](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission-Key.md#key-1) | [`key`](#key)  | Binary IP key for allocation hot-path comparisons. |
| [`Timeout`](https://auscaster.com/icey/docs/api-reference/icy-Timeout.md#timeout-1) | [`timeout`](#timeout-9)  | Countdown timer; expires after PERMISSION_LIFETIME milliseconds. |

---

<a id="ip"></a>

### ip

```cpp
std::string ip
```

[Defined in src/turn/include/icy/turn/permission.h:102](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/permission.h#L102)

IPv4 address string of the permitted peer.

---

<a id="key"></a>

### key

```cpp
Key key
```

Type: [`Key`](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission-Key.md#key-1)

[Defined in src/turn/include/icy/turn/permission.h:103](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/permission.h#L103)

Binary IP key for allocation hot-path comparisons.

---

<a id="timeout-9"></a>

### timeout

```cpp
Timeout timeout
```

Type: [`Timeout`](https://auscaster.com/icey/docs/api-reference/icy-Timeout.md#timeout-1)

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

Countdown timer; expires after PERMISSION_LIFETIME milliseconds.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Permission`](#permission-1) `inline` | Constructs a permission for `ip` and immediately starts the expiry timer. |
|  | [`Permission`](#permission-2) `inline` | Constructs a permission from a binary socket address. |
| `void` | [`refresh`](#refresh) `inline` | Resets the expiry timer, extending the permission lifetime by another 300 seconds. |
| `bool` | [`operator==`](#operator-227) `const` `inline` | Equality comparison against an IP string. |
| `bool` | [`matches`](#matches) `const` `inline` | Binary IP comparison used on the TURN relay hot path. |

---

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

### Permission

`inline`

```cpp
inline Permission(const std::string & ip)
```

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

Constructs a permission for `ip` and immediately starts the expiry timer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ip` | `const std::string &` | IPv4 address string of the permitted peer. |

---

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

### Permission

`inline`

```cpp
inline Permission(const net::Address & address)
```

[Defined in src/turn/include/icy/turn/permission.h:118](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/permission.h#L118)

Constructs a permission from a binary socket address.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `address` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Peer IP address; port is ignored. |

---

<a id="refresh"></a>

### refresh

`inline`

```cpp
inline void refresh()
```

[Defined in src/turn/include/icy/turn/permission.h:127](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/permission.h#L127)

Resets the expiry timer, extending the permission lifetime by another 300 seconds.

---

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

### operator==

`const` `inline`

```cpp
inline bool operator==(std::string_view r) const
```

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

Equality comparison against an IP string. 
#### Returns
true if this permission's IP matches `r`.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `r` | `std::string_view` | IPv4 address string to compare against. |

---

<a id="matches"></a>

### matches

`const` `inline`

```cpp
inline bool matches(const net::Address & address) const
```

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

Binary IP comparison used on the TURN relay hot path.
