# turn

<a id="turn"></a>

# turn

TURN allocation identity types and transport helpers.

## Classes

| Name | Description |
|------|-------------|
| [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) | TURN client that manages relay allocations, permissions, and data relay via RFC 5766. |
| [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple) | TURN allocation identity tuple: client remote address, server local address, and transport protocol. |
| [`IAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-IAllocation.md#iallocation) | Base class for TURN relay allocations shared by client and server flows. |
| [`PermissionPolicy`](https://auscaster.com/icey/docs/api-reference/icy-turn-PermissionPolicy.md#permissionpolicy) | Lightweight server-side TURN permission policy. |
| [`Request`](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) | A STUN message annotated with the transport type and source/destination addresses needed for server-side routing and response generation. |
| [`Server`](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) | TURN server RFC 5766 / RFC 6062 implementation. Listens on UDP and/or TCP, authenticates requests via [ServerObserver](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerObserver.md#serverobserver), and manages [ServerAllocation](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) objects for each 5-tuple. |
| [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) | Server-side TURN allocation that tracks permissions, lifetime, and relay state. Handles Refresh and CreatePermission requests common to both UDP and TCP allocations. Subclassed by [UDPAllocation](https://auscaster.com/icey/docs/api-reference/icy-turn-UDPAllocation.md#udpallocation) and [TCPAllocation](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) for transport-specific behaviour. |
| [`TCPAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) | Server-side TCP TURN allocation with connection pair management per RFC 6062. Maintains a control connection for STUN signalling and an acceptor socket for incoming peer TCP connections. Each peer connection is tracked as a [TCPConnectionPair](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPConnectionPair.md#tcpconnectionpair) and bridged to the client after a successful ConnectionBind. |
| [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) | TCP transport TURN client with relay connection management per RFC 6062. Uses a single TCP control connection for STUN signalling and opens additional TCP relay connections for each peer via the Connect / ConnectionBind flow. |
| [`TCPConnectionPair`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPConnectionPair.md#tcpconnectionpair) | Paired TCP connections forming a single TURN relay pipe between a client and a peer. Lifetime managed by [IntrusivePtr](https://auscaster.com/icey/docs/api-reference/icy-IntrusivePtr.md#intrusiveptr); the owning [TCPAllocation](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) holds the Ptr in its pair map. |
| [`UDPAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-UDPAllocation.md#udpallocation) | 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. |
| [`UDPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-UDPClient.md#udpclient) | UDP transport TURN client for datagram-based relay allocations. Uses a single UDP socket for both STUN signalling and Send/Data Indications. All [Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) methods apply; data is relayed via [sendData()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#senddata) using Send Indications. |
| [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) | Abstract observer interface for TURN client events. Callers subclass this to receive allocation lifecycle and data relay callbacks. |
| [`ClientState`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientState.md#clientstate) | [State](https://auscaster.com/icey/docs/api-reference/icy-State.md#state) machine states for the TURN client. |
| [`Permission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission.md#permission) | 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. |
| [`RelayConnectionBinding`](https://auscaster.com/icey/docs/api-reference/icy-turn-RelayConnectionBinding.md#relayconnectionbinding) | Binding metadata stored as socket opaque data during a ConnectionBind handshake. Associates a relay socket with its TURN connection ID and peer address. |
| [`ServerObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerObserver.md#serverobserver) | Observer interface that the application must implement to participate in server-side allocation management and authentication. |
| [`ServerOptions`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerOptions.md#serveroptions) | [Configuration](https://auscaster.com/icey/docs/api-reference/icy-Configuration.md#configuration) options for the TURN server. |
| [`TCPClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClientObserver.md#tcpclientobserver) | Observer interface for TCP TURN client events (RFC 6062). Extends [ClientObserver](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) with callbacks specific to TCP relay connections. |

## Enumerations

| Name | Description |
|------|-------------|
| [`AuthenticationState`](#authenticationstate)  | Result returned by [ServerObserver::authenticateRequest()](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerObserver.md#authenticaterequest-1) to control how the server proceeds with an incoming STUN request. |

---

<a id="authenticationstate"></a>

### AuthenticationState

```cpp
enum AuthenticationState
```

[Defined in src/turn/include/icy/turn/types.h:50](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L50)

Result returned by [ServerObserver::authenticateRequest()](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerObserver.md#authenticaterequest-1) to control how the server proceeds with an incoming STUN request.

| Value | Description |
|-------|-------------|
| `Authenticating` | Authentication is in progress; server holds the request. |
| `Authorized` | Credentials verified; request may proceed. |
| `QuotaReached` | User quota exceeded; respond with 486. |
| `NotAuthorized` | Credentials rejected; respond with 401. |
## Typedefs

| Return | Name | Description |
|--------|------|-------------|
| [`KVCollection`](https://auscaster.com/icey/docs/api-reference/icy-KVCollection.md#kvcollection)< [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address), [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter) > | [`ConnectionManager`](#connectionmanager)  | Relay connection registry keyed by peer address for RFC 6062 TCP relays. |
| [`ConnectionManager::Map`](https://auscaster.com/icey/docs/api-reference/icy-KVCollection.md#map-5) | [`ConnectionManagerMap`](#connectionmanagermap)  | Underlying map type used by the TCP relay connection registry. |
| std::vector< [`Permission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission.md#permission) > | [`PermissionList`](#permissionlist)  | Active TURN permissions associated with one allocation. |
| std::map< [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple), std::unique_ptr< [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) > > | [`ServerAllocationMap`](#serverallocationmap)  | Active server allocations keyed by the client/server 5-tuple. |
| std::map< uint32_t, [`TCPConnectionPair::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPConnectionPair.md#ptr-20) > | [`TCPConnectionPairMap`](#tcpconnectionpairmap)  | Accepted peer TCP connections keyed by TURN CONNECTION-ID. |
| `std::vector< std::string >` | [`IPList`](#iplist)  | List of peer IP strings used when creating or refreshing permissions. |

---

<a id="connectionmanager"></a>

### ConnectionManager

```cpp
using ConnectionManager = KVCollection< net::Address, net::SocketEmitter >
```

Type: [`KVCollection`](https://auscaster.com/icey/docs/api-reference/icy-KVCollection.md#kvcollection)< [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address), [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter) >

[Defined in src/turn/include/icy/turn/client/tcpclient.h:78](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/client/tcpclient.h#L78)

Relay connection registry keyed by peer address for RFC 6062 TCP relays.

---

<a id="connectionmanagermap"></a>

### ConnectionManagerMap

```cpp
using ConnectionManagerMap = ConnectionManager::Map
```

Type: [`ConnectionManager::Map`](https://auscaster.com/icey/docs/api-reference/icy-KVCollection.md#map-5)

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

Underlying map type used by the TCP relay connection registry.

---

<a id="permissionlist"></a>

### PermissionList

```cpp
using PermissionList = std::vector< Permission >
```

Type: std::vector< [`Permission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission.md#permission) >

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

Active TURN permissions associated with one allocation.

---

<a id="serverallocationmap"></a>

### ServerAllocationMap

```cpp
using ServerAllocationMap = std::map< FiveTuple, std::unique_ptr< ServerAllocation > >
```

Type: std::map< [`FiveTuple`](https://auscaster.com/icey/docs/api-reference/icy-turn-FiveTuple.md#fivetuple), std::unique_ptr< [`ServerAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-ServerAllocation.md#serverallocation) > >

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

Active server allocations keyed by the client/server 5-tuple.

---

<a id="tcpconnectionpairmap"></a>

### TCPConnectionPairMap

```cpp
using TCPConnectionPairMap = std::map< uint32_t, TCPConnectionPair::Ptr >
```

Type: std::map< uint32_t, [`TCPConnectionPair::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPConnectionPair.md#ptr-20) >

[Defined in src/turn/include/icy/turn/server/tcpallocation.h:29](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/tcpallocation.h#L29)

Accepted peer TCP connections keyed by TURN CONNECTION-ID.

---

<a id="iplist"></a>

### IPList

```cpp
using IPList = std::vector< std::string >
```

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

List of peer IP strings used when creating or refreshing permissions.

## Variables

| Return | Name | Description |
|--------|------|-------------|
| `constexpr std::int64_t` | [`kClientTimerInterval`](#kclienttimerinterval) `static` `constexpr` | [Timer](https://auscaster.com/icey/docs/api-reference/icy-Timer.md#timer) interval for client maintenance (30 seconds) |
| `constexpr std::int64_t` | [`kClientDefaultLifetime`](#kclientdefaultlifetime) `static` `constexpr` | Default client allocation lifetime (5 minutes, in milliseconds) |
| `constexpr long` | [`kClientDefaultTimeout`](#kclientdefaulttimeout) `static` `constexpr` | Default client transaction timeout (10 seconds) |
| `constexpr std::int64_t` | [`kDefaultAllocationLifetime`](#kdefaultallocationlifetime) `static` `constexpr` | Default allocation lifetime: 10 minutes (in milliseconds) |
| `constexpr int` | [`PERMISSION_LIFETIME`](#permission_lifetime) `static` `constexpr` | [Permission](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission.md#permission) Lifetime MUST be 300 seconds (= 5 minutes). |
| `constexpr uint32_t` | [`kServerDefaultLifetime`](#kserverdefaultlifetime) `static` `constexpr` | Default server allocation lifetime (2 minutes, in milliseconds) |
| `constexpr uint32_t` | [`kServerMaxLifetime`](#kservermaxlifetime) `static` `constexpr` | Maximum server allocation lifetime (15 minutes, in milliseconds) |
| `constexpr int` | [`kServerMaxPermissions`](#kservermaxpermissions) `static` `constexpr` | Maximum number of permissions per allocation. |
| `constexpr int` | [`kServerTimerInterval`](#kservertimerinterval) `static` `constexpr` | [Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) timer interval (10 seconds) |
| `constexpr int` | [`kServerEarlyMediaBufferSize`](#kserverearlymediabuffersize) `static` `constexpr` | Early media buffer size. |
| `constexpr int` | [`kConnectionBindTimeout`](#kconnectionbindtimeout) `static` `constexpr` | ConnectionBind request timeout (30 seconds, in milliseconds) |
| `constexpr int` | [`CLIENT_SOCK_BUF_SIZE`](#client_sock_buf_size) `static` `constexpr` | Default socket buffer size for TURN client sockets. |
| `constexpr int` | [`SERVER_SOCK_BUF_SIZE`](#server_sock_buf_size) `static` `constexpr` | Default socket buffer size for TURN server sockets. |
| `constexpr uint8_t` | [`kProtocolUDP`](#kprotocoludp) `static` `constexpr` | TURN protocol numbers. |
| `constexpr uint8_t` | [`kProtocolTCP`](#kprotocoltcp) `static` `constexpr` | IP protocol number for TCP. |
| `constexpr int` | [`kErrorTryAlternate`](#kerrortryalternate) `static` `constexpr` | TURN/STUN error codes used in this module. |
| `constexpr int` | [`kErrorBadRequest`](#kerrorbadrequest) `static` `constexpr` | [Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) was malformed or missing required attributes. |
| `constexpr int` | [`kErrorNotAuthorized`](#kerrornotauthorized) `static` `constexpr` | Authentication failed or credentials were not accepted. |
| `constexpr int` | [`kErrorForbidden`](#kerrorforbidden) `static` `constexpr` | [Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) was understood but is not permitted for this client. |
| `constexpr int` | [`kErrorUnknownAttribute`](#kerrorunknownattribute) `static` `constexpr` | [Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) included an unsupported comprehension-required attribute. |
| `constexpr int` | [`kErrorUnsupportedTransport`](#kerrorunsupportedtransport) `static` `constexpr` | Requested transport protocol is not supported by the server. |
| `constexpr int` | [`kErrorAllocationMismatch`](#kerrorallocationmismatch) `static` `constexpr` | [Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) attempted an allocation operation that conflicts with existing state. |
| `constexpr int` | [`kErrorStaleNonce`](#kerrorstalenonce) `static` `constexpr` | Authentication nonce expired and must be refreshed. |
| `constexpr int` | [`kErrorWrongCredentials`](#kerrorwrongcredentials) `static` `constexpr` | Supplied credentials were well formed but did not match the allocation. |
| `constexpr int` | [`kErrorConnectionAlreadyExists`](#kerrorconnectionalreadyexists) `static` `constexpr` | TURN TCP connection binding already exists. |
| `constexpr int` | [`kErrorConnectionTimeoutOrFailure`](#kerrorconnectiontimeoutorfailure) `static` `constexpr` | TURN TCP peer connection attempt timed out or failed. |
| `constexpr int` | [`kErrorAllocationQuotaReached`](#kerrorallocationquotareached) `static` `constexpr` | User or server allocation quota was exceeded. |
| `constexpr int` | [`kErrorInsufficientCapacity`](#kerrorinsufficientcapacity) `static` `constexpr` | [Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) lacks capacity to satisfy the request. |
| `constexpr int` | [`kErrorOperationNotSupported`](#kerroroperationnotsupported) `static` `constexpr` | [Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) is recognized but not implemented by this server. |

---

<a id="kclienttimerinterval"></a>

### kClientTimerInterval

`static` `constexpr`

```cpp
constexpr std::int64_t kClientTimerInterval = 30 * 1000
```

[Defined in src/turn/include/icy/turn/client/client.h:114](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/client/client.h#L114)

[Timer](https://auscaster.com/icey/docs/api-reference/icy-Timer.md#timer) interval for client maintenance (30 seconds)

---

<a id="kclientdefaultlifetime"></a>

### kClientDefaultLifetime

`static` `constexpr`

```cpp
constexpr std::int64_t kClientDefaultLifetime = 5 * 60 * 1000
```

[Defined in src/turn/include/icy/turn/client/client.h:117](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/client/client.h#L117)

Default client allocation lifetime (5 minutes, in milliseconds)

---

<a id="kclientdefaulttimeout"></a>

### kClientDefaultTimeout

`static` `constexpr`

```cpp
constexpr long kClientDefaultTimeout = 10 * 1000
```

[Defined in src/turn/include/icy/turn/client/client.h:120](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/client/client.h#L120)

Default client transaction timeout (10 seconds)

---

<a id="kdefaultallocationlifetime"></a>

### kDefaultAllocationLifetime

`static` `constexpr`

```cpp
constexpr std::int64_t kDefaultAllocationLifetime = 10 * 60 * 1000
```

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

Default allocation lifetime: 10 minutes (in milliseconds)

---

<a id="permission_lifetime"></a>

### PERMISSION_LIFETIME

`static` `constexpr`

```cpp
constexpr int PERMISSION_LIFETIME = 5 * 60 * 1000
```

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

[Permission](https://auscaster.com/icey/docs/api-reference/icy-turn-Permission.md#permission) Lifetime MUST be 300 seconds (= 5 minutes).

---

<a id="kserverdefaultlifetime"></a>

### kServerDefaultLifetime

`static` `constexpr`

```cpp
constexpr uint32_t kServerDefaultLifetime = 2 * 60 * 1000
```

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

Default server allocation lifetime (2 minutes, in milliseconds)

---

<a id="kservermaxlifetime"></a>

### kServerMaxLifetime

`static` `constexpr`

```cpp
constexpr uint32_t kServerMaxLifetime = 15 * 60 * 1000
```

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

Maximum server allocation lifetime (15 minutes, in milliseconds)

---

<a id="kservermaxpermissions"></a>

### kServerMaxPermissions

`static` `constexpr`

```cpp
constexpr int kServerMaxPermissions = 10
```

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

Maximum number of permissions per allocation.

---

<a id="kservertimerinterval"></a>

### kServerTimerInterval

`static` `constexpr`

```cpp
constexpr int kServerTimerInterval = 10 * 1000
```

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

[Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) timer interval (10 seconds)

---

<a id="kserverearlymediabuffersize"></a>

### kServerEarlyMediaBufferSize

`static` `constexpr`

```cpp
constexpr int kServerEarlyMediaBufferSize = 8192
```

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

Early media buffer size.

---

<a id="kconnectionbindtimeout"></a>

### kConnectionBindTimeout

`static` `constexpr`

```cpp
constexpr int kConnectionBindTimeout = 30 * 1000
```

[Defined in src/turn/include/icy/turn/server/tcpconnectionpair.h:29](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/server/tcpconnectionpair.h#L29)

ConnectionBind request timeout (30 seconds, in milliseconds)

---

<a id="client_sock_buf_size"></a>

### CLIENT_SOCK_BUF_SIZE

`static` `constexpr`

```cpp
constexpr int CLIENT_SOCK_BUF_SIZE = 65536
```

[Defined in src/turn/include/icy/turn/types.h:24](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L24)

Default socket buffer size for TURN client sockets.

---

<a id="server_sock_buf_size"></a>

### SERVER_SOCK_BUF_SIZE

`static` `constexpr`

```cpp
constexpr int SERVER_SOCK_BUF_SIZE = CLIENT_SOCK_BUF_SIZE * 32
```

[Defined in src/turn/include/icy/turn/types.h:25](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L25)

Default socket buffer size for TURN server sockets.

---

<a id="kprotocoludp"></a>

### kProtocolUDP

`static` `constexpr`

```cpp
constexpr uint8_t kProtocolUDP = 17
```

[Defined in src/turn/include/icy/turn/types.h:28](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L28)

TURN protocol numbers.

IP protocol number for UDP.

---

<a id="kprotocoltcp"></a>

### kProtocolTCP

`static` `constexpr`

```cpp
constexpr uint8_t kProtocolTCP = 6
```

[Defined in src/turn/include/icy/turn/types.h:29](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L29)

IP protocol number for TCP.

---

<a id="kerrortryalternate"></a>

### kErrorTryAlternate

`static` `constexpr`

```cpp
constexpr int kErrorTryAlternate = 300
```

[Defined in src/turn/include/icy/turn/types.h:32](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L32)

TURN/STUN error codes used in this module.

[Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) should retry against an alternate TURN server.

---

<a id="kerrorbadrequest"></a>

### kErrorBadRequest

`static` `constexpr`

```cpp
constexpr int kErrorBadRequest = 400
```

[Defined in src/turn/include/icy/turn/types.h:33](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L33)

[Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) was malformed or missing required attributes.

---

<a id="kerrornotauthorized"></a>

### kErrorNotAuthorized

`static` `constexpr`

```cpp
constexpr int kErrorNotAuthorized = 401
```

[Defined in src/turn/include/icy/turn/types.h:34](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L34)

Authentication failed or credentials were not accepted.

---

<a id="kerrorforbidden"></a>

### kErrorForbidden

`static` `constexpr`

```cpp
constexpr int kErrorForbidden = 403
```

[Defined in src/turn/include/icy/turn/types.h:35](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L35)

[Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) was understood but is not permitted for this client.

---

<a id="kerrorunknownattribute"></a>

### kErrorUnknownAttribute

`static` `constexpr`

```cpp
constexpr int kErrorUnknownAttribute = 420
```

[Defined in src/turn/include/icy/turn/types.h:36](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L36)

[Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) included an unsupported comprehension-required attribute.

---

<a id="kerrorunsupportedtransport"></a>

### kErrorUnsupportedTransport

`static` `constexpr`

```cpp
constexpr int kErrorUnsupportedTransport = 442
```

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

Requested transport protocol is not supported by the server.

---

<a id="kerrorallocationmismatch"></a>

### kErrorAllocationMismatch

`static` `constexpr`

```cpp
constexpr int kErrorAllocationMismatch = 437
```

[Defined in src/turn/include/icy/turn/types.h:38](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L38)

[Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) attempted an allocation operation that conflicts with existing state.

---

<a id="kerrorstalenonce"></a>

### kErrorStaleNonce

`static` `constexpr`

```cpp
constexpr int kErrorStaleNonce = 438
```

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

Authentication nonce expired and must be refreshed.

---

<a id="kerrorwrongcredentials"></a>

### kErrorWrongCredentials

`static` `constexpr`

```cpp
constexpr int kErrorWrongCredentials = 441
```

[Defined in src/turn/include/icy/turn/types.h:40](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L40)

Supplied credentials were well formed but did not match the allocation.

---

<a id="kerrorconnectionalreadyexists"></a>

### kErrorConnectionAlreadyExists

`static` `constexpr`

```cpp
constexpr int kErrorConnectionAlreadyExists = 446
```

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

TURN TCP connection binding already exists.

---

<a id="kerrorconnectiontimeoutorfailure"></a>

### kErrorConnectionTimeoutOrFailure

`static` `constexpr`

```cpp
constexpr int kErrorConnectionTimeoutOrFailure = 447
```

[Defined in src/turn/include/icy/turn/types.h:42](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L42)

TURN TCP peer connection attempt timed out or failed.

---

<a id="kerrorallocationquotareached"></a>

### kErrorAllocationQuotaReached

`static` `constexpr`

```cpp
constexpr int kErrorAllocationQuotaReached = 486
```

[Defined in src/turn/include/icy/turn/types.h:43](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L43)

User or server allocation quota was exceeded.

---

<a id="kerrorinsufficientcapacity"></a>

### kErrorInsufficientCapacity

`static` `constexpr`

```cpp
constexpr int kErrorInsufficientCapacity = 508
```

[Defined in src/turn/include/icy/turn/types.h:44](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L44)

[Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7) lacks capacity to satisfy the request.

---

<a id="kerroroperationnotsupported"></a>

### kErrorOperationNotSupported

`static` `constexpr`

```cpp
constexpr int kErrorOperationNotSupported = 600
```

[Defined in src/turn/include/icy/turn/types.h:45](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/types.h#L45)

[Request](https://auscaster.com/icey/docs/api-reference/icy-turn-Request.md#request-14) is recognized but not implemented by this server.
