# TCPClient

<a id="tcpclient"></a>

# TCPClient

```cpp
#include <icy/turn/client/tcpclient.h>

class TCPClient
```

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

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

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.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`TCPClient`](#tcpclient-1) | `function` | Declared here |
| [`~TCPClient`](#tcpclient-2) | `function` | Declared here |
| [`start`](#start-29) | `function` | Declared here |
| [`stop`](#stop-18) | `function` | Declared here |
| [`sendConnectRequest`](#sendconnectrequest) | `function` | Declared here |
| [`sendData`](#senddata-1) | `function` | Declared here |
| [`handleResponse`](#handleresponse-1) | `function` | Declared here |
| [`handleConnectResponse`](#handleconnectresponse) | `function` | Declared here |
| [`handleConnectErrorResponse`](#handleconnecterrorresponse) | `function` | Declared here |
| [`handleConnectionBindResponse`](#handleconnectionbindresponse) | `function` | Declared here |
| [`handleConnectionBindErrorResponse`](#handleconnectionbinderrorresponse) | `function` | Declared here |
| [`handleConnectionAttemptIndication`](#handleconnectionattemptindication) | `function` | Declared here |
| [`createAndBindConnection`](#createandbindconnection) | `function` | Declared here |
| [`onRelayConnectionConnect`](#onrelayconnectionconnect) | `function` | Declared here |
| [`onRelayDataReceived`](#onrelaydatareceived-1) | `function` | Declared here |
| [`onRelayConnectionError`](#onrelayconnectionerror) | `function` | Declared here |
| [`onRelayConnectionClosed`](#onrelayconnectionclosed) | `function` | Declared here |
| [`freeConnection`](#freeconnection) | `function` | Declared here |
| [`transportProtocol`](#transportprotocol-1) | `function` | Declared here |
| [`connections`](#connections) | `function` | Declared here |
| [`className`](#classname-11) | `function` | Declared here |
| [`_observer`](#_observer-3) | `variable` | Declared here |
| [`_connections`](#_connections-2) | `variable` | Declared here |
| [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-4) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`~Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-5) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`start`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#start-27) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`stop`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#stop-16) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendAllocate`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendallocate) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-1) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendCreatePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendcreatepermission) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendChannelBind`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendchannelbind) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendRefresh`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendrefresh) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendData`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#senddata) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleAllocateResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleallocateresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleAllocateErrorResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleallocateerrorresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleCreatePermissionResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlecreatepermissionresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleCreatePermissionErrorResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlecreatepermissionerrorresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleRefreshResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlerefreshresponse) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`handleDataIndication`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handledataindication) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`transportProtocol`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#transportprotocol) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`createTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#createtransaction) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`authenticateRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#authenticaterequest) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`sendAuthenticatedTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendauthenticatedtransaction) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`removeTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removetransaction) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`mappedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#mappedaddress) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#relayedaddress) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`closed`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#closed-7) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`observer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#observer-1) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`options`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#options-9) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-2) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-3) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#haspermission) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#haspermission-1) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission-1) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_observer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_observer-1) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_options`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_options-3) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_socket`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_socket-3) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_timer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_timer-3) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_error`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_error-7) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_mappedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_mappedaddress) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_relayedaddress) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_realm`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_realm) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_nonce`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_nonce) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_pendingIndications`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_pendingindications) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`_transactions`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_transactions) | `variable` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`setError`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#seterror-6) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketconnect-5) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketrecv-7) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketclose-5) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onTransactionProgress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#ontransactionprogress) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onstatechange-4) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#ontimer-1) | `function` | Inherited from [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) |
| [`StateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statechange) | `variable` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-1) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`~Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-2) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`stateEquals`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateequals) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`stateBetween`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statebetween) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-4) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-5) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`_state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#_state) | `variable` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`beforeStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#beforestatechange) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#onstatechange-2) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate-1) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`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 [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-4)  |  |
| `function` | [`~Client`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-5) `virtual` |  |
| `function` | [`start`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#start-27) `virtual` | Connects the socket to the TURN server and starts the allocation sequence. Permissions must be added via [addPermission()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission) before calling this. |
| `function` | [`stop`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#stop-16) `virtual` | Stops the timer, cancels pending transactions, and closes the socket. |
| `function` | [`sendAllocate`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendallocate) `virtual` | Sends an Allocate request to the server with the configured transport and lifetime. On first call the server will typically respond with a 401 challenge; the client re-sends with credentials automatically. |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission) `virtual` | Adds multiple peer IP addresses to the permission list. |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-1) `virtual` `override` | Adds a single peer IP to the permission list, or refreshes it if already present. Permissions should be added before [start()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#start-27); they may also be added later, in which case a new CreatePermission request is required. |
| `function` | [`sendCreatePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendcreatepermission) `virtual` | Sends a CreatePermission request for all IPs currently in the permission list. Called automatically after allocation succeeds and periodically by the timer to refresh expiring permissions. |
| `function` | [`sendChannelBind`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendchannelbind) `virtual` | Channel bindings (RFC 5766 Section 11) are intentionally not implemented. They are a bandwidth optimization that replaces STUN-framed Send/Data indications with a compact 4-byte ChannelData header. This only benefits high-throughput media relay scenarios; in practice, media flows directly via ICE/DTLS rather than through this TURN client's data path, so the optimization is not worth the complexity (channel number allocation, 10-minute binding refresh timers, ChannelData wire framing). Data relay uses [sendData()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#senddata) with Send Indications instead. |
| `function` | [`sendRefresh`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendrefresh) `virtual` | Sends a Refresh request to extend the allocation lifetime. Called automatically by the timer when roughly one-third of the lifetime remains. |
| `function` | [`sendData`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#senddata) `virtual` | Sends a Send Indication to relay `data` to `peerAddress` through the TURN server. If permissions are still being negotiated the indication is queued and flushed once CreatePermission succeeds. |
| `function` | [`handleResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleresponse) `virtual` | Dispatches an incoming STUN/TURN response to the appropriate handler. |
| `function` | [`handleAllocateResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleallocateresponse) `virtual` | Processes a successful Allocate response; extracts mapped/relayed addresses and advances the state to Authorizing, then sends CreatePermission. |
| `function` | [`handleAllocateErrorResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handleallocateerrorresponse) `virtual` | Handles an Allocate error response; manages the 401 challenge/re-send flow and sets the client to Failed for unrecoverable errors. |
| `function` | [`handleCreatePermissionResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlecreatepermissionresponse) `virtual` | Handles a successful CreatePermission response; flushes queued Send Indications and advances state to Success. |
| `function` | [`handleCreatePermissionErrorResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlecreatepermissionerrorresponse) `virtual` | Handles a failed CreatePermission response; clears all permissions and sets the client to Failed. |
| `function` | [`handleRefreshResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handlerefreshresponse) `virtual` | Handles a Refresh response; updates the stored lifetime. |
| `function` | [`handleDataIndication`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#handledataindication) `virtual` | Handles an incoming Data Indication; extracts peer address and data and forwards to [ClientObserver::onRelayDataReceived()](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onrelaydatareceived). |
| `function` | [`transportProtocol`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#transportprotocol) `virtual` |  |
| `function` | [`createTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#createtransaction) `virtual` | Creates a new STUN transaction, registers the progress callback, and adds it to the active transaction list. |
| `function` | [`authenticateRequest`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#authenticaterequest) `virtual` | Adds STUN long-term credential attributes (Username, Realm, Nonce, MessageIntegrity) to `request` if the realm has been received from the server. |
| `function` | [`sendAuthenticatedTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#sendauthenticatedtransaction) `virtual` | Calls [authenticateRequest()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#authenticaterequest) then sends the transaction. |
| `function` | [`removeTransaction`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removetransaction) `virtual` | Removes a transaction from the active list. The [IntrusivePtr](https://auscaster.com/icey/docs/api-reference/icy-IntrusivePtr.md#intrusiveptr) keeps the object alive until the caller's copy is released. |
| `function` | [`mappedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#mappedaddress) `const` |  |
| `function` | [`relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#relayedaddress) `virtual` `const` `override` |  |
| `function` | [`closed`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#closed-7) `const` |  |
| `function` | [`observer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#observer-1)  |  |
| `function` | [`options`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#options-9) `const` |  |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-2) `virtual` | Adds a permission for `ip`, or refreshes the existing one. |
| `function` | [`addPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission-3) `virtual` | Adds a permission for `address`, or refreshes the existing one. The port is ignored; TURN permissions are IP-only. |
| `function` | [`hasPermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#haspermission) `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-Client.md#haspermission-1) `virtual` | Checks whether a permission exists for `peerAddress`. The port is ignored; TURN permissions are IP-only. |
| `function` | [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission) `virtual` | Removes the permission for `ip` if present. |
| `function` | [`removePermission`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#removepermission-1) `virtual` | Removes the permission for `address` if present. The port is ignored; TURN permissions are IP-only. |
| `variable` | [`_observer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_observer-1)  |  |
| `variable` | [`_options`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_options-3)  |  |
| `variable` | [`_socket`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_socket-3)  |  |
| `variable` | [`_timer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_timer-3)  |  |
| `variable` | [`_error`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_error-7)  |  |
| `variable` | [`_mappedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_mappedaddress)  |  |
| `variable` | [`_relayedAddress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_relayedaddress)  |  |
| `variable` | [`_realm`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_realm)  |  |
| `variable` | [`_nonce`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_nonce)  |  |
| `variable` | [`_pendingIndications`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_pendingindications)  | A list of queued Send indication packets awaiting server permissions. |
| `variable` | [`_transactions`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#_transactions)  | A list containing currently active transactions. |
| `function` | [`setError`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#seterror-6) `virtual` | Sets the error field and transitions the client to the Failed state. |
| `function` | [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketconnect-5) `virtual` | Socket connect callback; starts the timer and sends the first Allocate request. |
| `function` | [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketrecv-7) `virtual` | Socket receive callback; parses STUN messages from the buffer and dispatches them. |
| `function` | [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onsocketclose-5) `virtual` | Socket close callback; shuts down the client and records the socket error. |
| `function` | [`onTransactionProgress`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#ontransactionprogress) `virtual` | STUN transaction state-change callback; handles Success and Failed outcomes. |
| `function` | [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#onstatechange-4) `override` | Forwards state-change events to the observer. |
| `function` | [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#ontimer-1) `virtual` | Periodic timer callback; re-allocates on expiry or refreshes when lifetime is below one-third remaining. Also calls [ClientObserver::onTimer()](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#ontimer-2). |

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

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`StateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statechange)  | Signals when the state changes. |
| `function` | [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-1) `inline` |  |
| `function` | [`~Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-2) `virtual` `inline` |  |
| `function` | [`stateEquals`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateequals) `virtual` `const` `inline` | Returns true if the current state ID equals the given ID. |
| `function` | [`stateBetween`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statebetween) `virtual` `const` `inline` | Returns true if the current state ID is in the inclusive range [lid, rid]. |
| `function` | [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-4) `virtual` `inline` | Returns a mutable reference to the current state. |
| `function` | [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-5) `virtual` `const` `inline` | Returns a copy of the current state. |
| `variable` | [`_state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#_state)  |  |
| `function` | [`beforeStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#beforestatechange) `virtual` `inline` | Override to handle pre state change logic. Return false to prevent state change. |
| `function` | [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#onstatechange-2) `virtual` `inline` | Override to handle post state change logic. |
| `function` | [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate) `virtual` `inline` | Sets the state and sends the state signal if the state change was successful. |
| `function` | [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate-1) `virtual` `inline` | Sets the state and sends the state signal if the state change was successful. |

## 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 |
|--------|------|-------------|
|  | [`TCPClient`](#tcpclient-1)  |  |
|  | [`~TCPClient`](#tcpclient-2) `virtual` |  |
| `void` | [`start`](#start-29) `virtual` `override` | Connects the socket to the TURN server and starts the allocation sequence. Permissions must be added via [addPermission()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission) before calling this. |
| `void` | [`stop`](#stop-18) `virtual` `override` | Stops the control connection, cancels all relay connections, and calls the base class [stop()](#stop-18). |
| `void` | [`sendConnectRequest`](#sendconnectrequest) `virtual` | Sends a Connect request to the server asking it to open a TCP connection to `peerAddress` on the client's behalf (RFC 6062 section 4.3). |
| `void` | [`sendData`](#senddata-1) `virtual` `override` | Sends raw data to `peerAddress` over the established relay connection. The peer must have an active permission and a bound relay connection. |
| `bool` | [`handleResponse`](#handleresponse-1) `virtual` `override` | Extends the base handler with Connect, ConnectionBind, and ConnectionAttempt responses. |
| `void` | [`handleConnectResponse`](#handleconnectresponse) `virtual` | Processes a successful Connect response; extracts the connection ID and calls [createAndBindConnection()](#createandbindconnection). |
| `void` | [`handleConnectErrorResponse`](#handleconnecterrorresponse) `virtual` | Processes a Connect error response; notifies the observer that binding failed. |
| `void` | [`handleConnectionBindResponse`](#handleconnectionbindresponse) `virtual` | Processes a successful ConnectionBind response; arms the relay socket for data transfer and notifies the observer. |
| `void` | [`handleConnectionBindErrorResponse`](#handleconnectionbinderrorresponse) `virtual` | Processes a ConnectionBind error response; frees the failed connection. |
| `void` | [`handleConnectionAttemptIndication`](#handleconnectionattemptindication) `virtual` | Processes a ConnectionAttempt indication from the server; optionally accepts the incoming peer connection by calling [createAndBindConnection()](#createandbindconnection). |
| `bool` | [`createAndBindConnection`](#createandbindconnection) `virtual` | Opens a new TCP relay socket to the TURN server and sends a ConnectionBind request carrying `connectionID`. |
| `bool` | [`onRelayConnectionConnect`](#onrelayconnectionconnect) `virtual` | Relay socket connect callback; sends the ConnectionBind request. |
| `bool` | [`onRelayDataReceived`](#onrelaydatareceived-1) `virtual` | Relay socket receive callback; forwards data to the observer. |
| `bool` | [`onRelayConnectionError`](#onrelayconnectionerror) `virtual` | Relay socket error callback; notifies the observer of the error. |
| `bool` | [`onRelayConnectionClosed`](#onrelayconnectionclosed) `virtual` | Relay socket close callback; notifies the observer and frees the connection. |
| `void` | [`freeConnection`](#freeconnection)  | Removes the relay connection for `peerAddress`, unregisters its callbacks, and deletes the associated [RelayConnectionBinding](https://auscaster.com/icey/docs/api-reference/icy-turn-RelayConnectionBinding.md#relayconnectionbinding). |
| `int` | [`transportProtocol`](#transportprotocol-1) `virtual` `override` |  |
| [`ConnectionManager`](https://auscaster.com/icey/docs/api-reference/icy-turn.md#connectionmanager) & | [`connections`](#connections)  |  |
| `const char *` | [`className`](#classname-11) `virtual` `const` `inline` |  |

---

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

### TCPClient

```cpp
TCPClient(TCPClientObserver & observer, const Client::Options & options = Client::Options())
```

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `observer` | [`TCPClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClientObserver.md#tcpclientobserver) & | Observer for TCP-specific relay events. |
| `options` | const [`Client::Options`](https://auscaster.com/icey/docs/api-reference/icy-turn-Client-Options.md#options-10) & | [Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3) configuration; defaults to loopback server, 5-min lifetime. |

---

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

### ~TCPClient

`virtual`

```cpp
virtual ~TCPClient()
```

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

---

<a id="start-29"></a>

### start

`virtual` `override`

```cpp
virtual void start() override
```

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

Connects the socket to the TURN server and starts the allocation sequence. Permissions must be added via [addPermission()](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#addpermission) before calling this.

#### Reimplements

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

---

<a id="stop-18"></a>

### stop

`virtual` `override`

```cpp
virtual void stop() override
```

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

Stops the control connection, cancels all relay connections, and calls the base class [stop()](#stop-18).

#### Reimplements

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

---

<a id="sendconnectrequest"></a>

### sendConnectRequest

`virtual`

```cpp
virtual void sendConnectRequest(const net::Address & peerAddress)
```

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

Sends a Connect request to the server asking it to open a TCP connection to `peerAddress` on the client's behalf (RFC 6062 section 4.3).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Target peer address. |

---

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

### sendData

`virtual` `override`

```cpp
virtual void sendData(const char * data, size_t size, const net::Address & peerAddress) override
```

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

Sends raw data to `peerAddress` over the established relay connection. The peer must have an active permission and a bound relay connection.

#### Reimplements

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

#### Parameters

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

---

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

### handleResponse

`virtual` `override`

```cpp
virtual bool handleResponse(const stun::Message & response) override
```

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

Extends the base handler with Connect, ConnectionBind, and ConnectionAttempt responses. 
#### Returns
true if the message was handled.

#### Reimplements

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | Incoming STUN response. |

---

<a id="handleconnectresponse"></a>

### handleConnectResponse

`virtual`

```cpp
virtual void handleConnectResponse(const stun::Message & response)
```

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

Processes a successful Connect response; extracts the connection ID and calls [createAndBindConnection()](#createandbindconnection).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | Connect success response. |

---

<a id="handleconnecterrorresponse"></a>

### handleConnectErrorResponse

`virtual`

```cpp
virtual void handleConnectErrorResponse(const stun::Message & response)
```

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

Processes a Connect error response; notifies the observer that binding failed.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | Connect error response. |

---

<a id="handleconnectionbindresponse"></a>

### handleConnectionBindResponse

`virtual`

```cpp
virtual void handleConnectionBindResponse(const stun::Message & response)
```

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

Processes a successful ConnectionBind response; arms the relay socket for data transfer and notifies the observer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | ConnectionBind success response. |

---

<a id="handleconnectionbinderrorresponse"></a>

### handleConnectionBindErrorResponse

`virtual`

```cpp
virtual void handleConnectionBindErrorResponse(const stun::Message & response)
```

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

Processes a ConnectionBind error response; frees the failed connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | ConnectionBind error response. |

---

<a id="handleconnectionattemptindication"></a>

### handleConnectionAttemptIndication

`virtual`

```cpp
virtual void handleConnectionAttemptIndication(const stun::Message & response)
```

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

Processes a ConnectionAttempt indication from the server; optionally accepts the incoming peer connection by calling [createAndBindConnection()](#createandbindconnection).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `response` | const [`stun::Message`](https://auscaster.com/icey/docs/api-reference/icy-stun-Message.md#message-6) & | ConnectionAttempt indication message. |

---

<a id="createandbindconnection"></a>

### createAndBindConnection

`virtual`

```cpp
virtual bool createAndBindConnection(uint32_t connectionID, const net::Address & peerAddress)
```

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

Opens a new TCP relay socket to the TURN server and sends a ConnectionBind request carrying `connectionID`. 
#### Returns
true on success.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `connectionID` | `uint32_t` | TURN CONNECTION-ID from the server. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Peer associated with this connection. |

---

<a id="onrelayconnectionconnect"></a>

### onRelayConnectionConnect

`virtual`

```cpp
virtual bool onRelayConnectionConnect(net::Socket & socket)
```

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

Relay socket connect callback; sends the ConnectionBind request.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The relay socket that just connected. |

---

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

### onRelayDataReceived

`virtual`

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

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

Relay socket receive callback; forwards data to the observer.

#### Parameters

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

---

<a id="onrelayconnectionerror"></a>

### onRelayConnectionError

`virtual`

```cpp
virtual bool onRelayConnectionError(net::Socket & socket, const Error & error)
```

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

Relay socket error callback; notifies the observer of the error.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The affected relay socket. |
| `error` | const [`Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) & | [Error](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) descriptor. |

---

<a id="onrelayconnectionclosed"></a>

### onRelayConnectionClosed

`virtual`

```cpp
virtual bool onRelayConnectionClosed(net::Socket & socket)
```

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

Relay socket close callback; notifies the observer and frees the connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The closed relay socket. |

---

<a id="freeconnection"></a>

### freeConnection

```cpp
void freeConnection(const net::Address & peerAddress)
```

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

Removes the relay connection for `peerAddress`, unregisters its callbacks, and deletes the associated [RelayConnectionBinding](https://auscaster.com/icey/docs/api-reference/icy-turn-RelayConnectionBinding.md#relayconnectionbinding).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Peer whose connection to release. |

---

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

### transportProtocol

`virtual` `override`

```cpp
virtual int transportProtocol() override
```

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

#### Returns
kProtocolTCP (6).

#### Reimplements

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

---

<a id="connections"></a>

### connections

```cpp
ConnectionManager & connections()
```

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

#### Returns
Reference to the map of active relay connections keyed by peer address.

---

<a id="classname-11"></a>

### className

`virtual` `const` `inline`

```cpp
virtual inline const char * className() const
```

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

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`TCPClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClientObserver.md#tcpclientobserver) & | [`_observer`](#_observer-3)  |  |
| [`ConnectionManager`](https://auscaster.com/icey/docs/api-reference/icy-turn.md#connectionmanager) | [`_connections`](#_connections-2)  |  |

---

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

### _observer

```cpp
TCPClientObserver & _observer
```

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

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

---

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

### _connections

```cpp
ConnectionManager _connections
```

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

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