# TCPClientObserver

<a id="tcpclientobserver"></a>

# TCPClientObserver

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

struct TCPClientObserver
```

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

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

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.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`onRelayConnectionCreated`](#onrelayconnectioncreated) | `function` | Declared here |
| [`onRelayConnectionError`](#onrelayconnectionerror-1) | `function` | Declared here |
| [`onRelayConnectionClosed`](#onrelayconnectionclosed-1) | `function` | Declared here |
| [`onRelayConnectionBindingFailed`](#onrelayconnectionbindingfailed) | `function` | Declared here |
| [`onPeerConnectionAttempt`](#onpeerconnectionattempt) | `function` | Declared here |
| [`onClientStateChange`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onclientstatechange) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onRelayDataReceived`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onrelaydatareceived) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onAllocationFailed`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationfailed) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onAllocationDeleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationdeleted) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onAllocationPermissionsCreated`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationpermissionscreated) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onTransactionResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#ontransactionresponse) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |
| [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#ontimer-2) | `function` | Inherited from [`ClientObserver`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#clientobserver) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`onClientStateChange`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onclientstatechange) `virtual` | Called whenever the client's state machine transitions to a new state. |
| `function` | [`onRelayDataReceived`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onrelaydatareceived) `virtual` | Called when relayed data is received from a peer via a Data Indication. |
| `function` | [`onAllocationFailed`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationfailed) `virtual` `inline` | Called when the server rejects an Allocate request with an error. |
| `function` | [`onAllocationDeleted`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationdeleted) `virtual` `inline` | Called when the server confirms deletion of the allocation. |
| `function` | [`onAllocationPermissionsCreated`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#onallocationpermissionscreated) `virtual` `inline` | Called after a CreatePermission request succeeds. |
| `function` | [`onTransactionResponse`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#ontransactionresponse) `virtual` `inline` | All received transaction responses will be routed here after local processing so the observer can easily implement extra functionality. |
| `function` | [`onTimer`](https://auscaster.com/icey/docs/api-reference/icy-turn-ClientObserver.md#ontimer-2) `virtual` `inline` | Fires after the client's internal timer callback. Handy for performing extra async cleanup tasks. |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`onRelayConnectionCreated`](#onrelayconnectioncreated) `virtual` | Called when a ConnectionBind succeeds and the relay pipe is live. |
| `void` | [`onRelayConnectionError`](#onrelayconnectionerror-1) `virtual` `inline` | Called when an error occurs on a relay connection socket. |
| `void` | [`onRelayConnectionClosed`](#onrelayconnectionclosed-1) `virtual` | Called when a relay connection socket is closed. |
| `void` | [`onRelayConnectionBindingFailed`](#onrelayconnectionbindingfailed) `virtual` `inline` | Called when a Connect request (client-initiated) or a ConnectionBind handshake fails for the given peer. |
| `bool` | [`onPeerConnectionAttempt`](#onpeerconnectionattempt) `virtual` `inline` | Called when the server sends a ConnectionAttempt indication indicating that a remote peer wants to connect. Return true to accept the connection (proceeds with ConnectionBind), or false to reject it. |

---

<a id="onrelayconnectioncreated"></a>

### onRelayConnectionCreated

`virtual`

```cpp
virtual void onRelayConnectionCreated(TCPClient & client, const net::TCPSocket::Ptr & socket, const net::Address & peerAddress)
```

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

Called when a ConnectionBind succeeds and the relay pipe is live.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `client` | [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) & | The owning TCP client. |
| `socket` | const [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) & | The TCP socket that is now connected to the TURN server and ready for direct data transfer to/from the peer. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | The remote peer address associated with this connection. |

---

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

### onRelayConnectionError

`virtual` `inline`

```cpp
virtual inline void onRelayConnectionError(TCPClient & client, const net::TCPSocket::Ptr & socket, const net::Address & peerAddress)
```

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

Called when an error occurs on a relay connection socket.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `client` | [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) & | The owning TCP client. |
| `socket` | const [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) & | The affected socket. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | The remote peer address for this connection. |

---

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

### onRelayConnectionClosed

`virtual`

```cpp
virtual void onRelayConnectionClosed(TCPClient & client, const net::TCPSocket::Ptr & socket, const net::Address & peerAddress)
```

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

Called when a relay connection socket is closed.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `client` | [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) & | The owning TCP client. |
| `socket` | const [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) & | The closed socket. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | The remote peer address for this connection. |

---

<a id="onrelayconnectionbindingfailed"></a>

### onRelayConnectionBindingFailed

`virtual` `inline`

```cpp
virtual inline void onRelayConnectionBindingFailed(TCPClient & client, const net::Address & peerAddress)
```

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

Called when a Connect request (client-initiated) or a ConnectionBind handshake fails for the given peer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `client` | [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) & | The owning TCP client. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | The peer address whose binding failed. |

---

<a id="onpeerconnectionattempt"></a>

### onPeerConnectionAttempt

`virtual` `inline`

```cpp
virtual inline bool onPeerConnectionAttempt(TCPClient & client, const net::Address & peerAddress)
```

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

Called when the server sends a ConnectionAttempt indication indicating that a remote peer wants to connect. Return true to accept the connection (proceeds with ConnectionBind), or false to reject it. 
#### Returns
true to accept and bind, false to ignore.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `client` | [`TCPClient`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPClient.md#tcpclient) & | The owning TCP client. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | The address of the connecting peer. |
