# TCPConnectionPair

<a id="tcpconnectionpair"></a>

# TCPConnectionPair

```cpp
#include <icy/turn/server/tcpconnectionpair.h>

class TCPConnectionPair
```

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

> **Inherits:** [`RefCounted< TCPConnectionPair >`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted)

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.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`allocation`](#allocation) | `variable` | Declared here |
| [`client`](#client-6) | `variable` | Declared here |
| [`peer`](#peer) | `variable` | Declared here |
| [`earlyPeerData`](#earlypeerdata) | `variable` | Declared here |
| [`connectionID`](#connectionid-1) | `variable` | Declared here |
| [`isDataConnection`](#isdataconnection) | `variable` | Declared here |
| [`pendingDelete`](#pendingdelete) | `variable` | Declared here |
| [`timeout`](#timeout-10) | `variable` | Declared here |
| [`transactionID`](#transactionid) | `variable` | Declared here |
| [`TCPConnectionPair`](#tcpconnectionpair-1) | `function` | Declared here |
| [`~TCPConnectionPair`](#tcpconnectionpair-2) | `function` | Declared here |
| [`doPeerConnect`](#dopeerconnect) | `function` | Declared here |
| [`makeDataConnection`](#makedataconnection) | `function` | Declared here |
| [`setPeerSocket`](#setpeersocket) | `function` | Declared here |
| [`setClientSocket`](#setclientsocket) | `function` | Declared here |
| [`onPeerConnectSuccess`](#onpeerconnectsuccess) | `function` | Declared here |
| [`onPeerConnectError`](#onpeerconnecterror) | `function` | Declared here |
| [`onClientDataReceived`](#onclientdatareceived) | `function` | Declared here |
| [`onPeerDataReceived`](#onpeerdatareceived) | `function` | Declared here |
| [`onConnectionClosed`](#onconnectionclosed) | `function` | Declared here |
| [`startTimeout`](#starttimeout) | `function` | Declared here |
| [`requestDeletion`](#requestdeletion) | `function` | Declared here |
| [`expired`](#expired-2) | `function` | Declared here |
| [`Ptr`](#ptr-20) | `typedef` | Declared here |
| [`TCPConnectionPair`](#tcpconnectionpair-3) | `function` | Declared here |
| [`operator=`](#operator-230) | `function` | Declared here |
| [`TCPConnectionPair`](#tcpconnectionpair-4) | `function` | Declared here |
| [`operator=`](#operator-231) | `function` | Declared here |
| [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-1) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-2) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#operator-78) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`addRef`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#addref) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`releaseRef`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#releaseref) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`refCount`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcount) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`~RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-3) | `function` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |
| [`_refCount`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#_refcount) | `variable` | Inherited from [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-1)  | Defaulted constructor. |
| `function` | [`RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-2) `inline` `noexcept` |  |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#operator-78) `inline` `noexcept` |  |
| `function` | [`addRef`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#addref) `const` `inline` `noexcept` | Increments the reference count. Called by [IntrusivePtr](https://auscaster.com/icey/docs/api-reference/icy-IntrusivePtr.md#intrusiveptr) on acquisition. |
| `function` | [`releaseRef`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#releaseref) `const` `inline` `noexcept` | Decrements the reference count. |
| `function` | [`refCount`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcount) `const` `inline` `noexcept` | Returns the current reference count. |
| `function` | [`~RefCounted`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#refcounted-3)  | Defaulted destructor. |
| `variable` | [`_refCount`](https://auscaster.com/icey/docs/api-reference/icy-RefCounted.md#_refcount)  |  |

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`TCPAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) & | [`allocation`](#allocation)  |  |
| [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter) | [`client`](#client-6)  |  |
| [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter) | [`peer`](#peer)  |  |
| [`Buffer`](https://auscaster.com/icey/docs/api-reference/base.md#buffer) | [`earlyPeerData`](#earlypeerdata)  |  |
| `uint32_t` | [`connectionID`](#connectionid-1)  |  |
| `bool` | [`isDataConnection`](#isdataconnection)  |  |
| `bool` | [`pendingDelete`](#pendingdelete)  |  |
| [`Timeout`](https://auscaster.com/icey/docs/api-reference/icy-Timeout.md#timeout-1) | [`timeout`](#timeout-10)  |  |
| [`stun::TransactionID`](https://auscaster.com/icey/docs/api-reference/icy-stun.md#transactionid-1) | [`transactionID`](#transactionid)  |  |

---

<a id="allocation"></a>

### allocation

```cpp
TCPAllocation & allocation
```

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

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

---

<a id="client-6"></a>

### client

```cpp
net::SocketEmitter client
```

Type: [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter)

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

---

<a id="peer"></a>

### peer

```cpp
net::SocketEmitter peer
```

Type: [`net::SocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketEmitter.md#socketemitter)

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

---

<a id="earlypeerdata"></a>

### earlyPeerData

```cpp
Buffer earlyPeerData
```

Type: [`Buffer`](https://auscaster.com/icey/docs/api-reference/base.md#buffer)

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

---

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

### connectionID

```cpp
uint32_t connectionID
```

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

---

<a id="isdataconnection"></a>

### isDataConnection

```cpp
bool isDataConnection
```

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

---

<a id="pendingdelete"></a>

### pendingDelete

```cpp
bool pendingDelete = false
```

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

---

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

### timeout

```cpp
Timeout timeout
```

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

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

---

<a id="transactionid"></a>

### transactionID

```cpp
stun::TransactionID transactionID
```

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

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

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`TCPConnectionPair`](#tcpconnectionpair-1)  | Constructs a pair with a randomly assigned connection ID. The caller must add the pair to the allocation's pair map. |
|  | [`~TCPConnectionPair`](#tcpconnectionpair-2)  |  |
| `bool` | [`doPeerConnect`](#dopeerconnect)  |  |
| `bool` | [`makeDataConnection`](#makedataconnection)  |  |
| `void` | [`setPeerSocket`](#setpeersocket)  |  |
| `void` | [`setClientSocket`](#setclientsocket)  |  |
| `bool` | [`onPeerConnectSuccess`](#onpeerconnectsuccess)  |  |
| `bool` | [`onPeerConnectError`](#onpeerconnecterror)  |  |
| `bool` | [`onClientDataReceived`](#onclientdatareceived)  |  |
| `bool` | [`onPeerDataReceived`](#onpeerdatareceived)  |  |
| `bool` | [`onConnectionClosed`](#onconnectionclosed)  |  |
| `void` | [`startTimeout`](#starttimeout)  |  |
| `void` | [`requestDeletion`](#requestdeletion)  |  |
| `bool` | [`expired`](#expired-2) `const` |  |

---

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

### TCPConnectionPair

```cpp
TCPConnectionPair(TCPAllocation & allocation)
```

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

Constructs a pair with a randomly assigned connection ID. The caller must add the pair to the allocation's pair map.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `allocation` | [`TCPAllocation`](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) & | The [TCPAllocation](https://auscaster.com/icey/docs/api-reference/icy-turn-TCPAllocation.md#tcpallocation) that owns this pair. |

---

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

### ~TCPConnectionPair

```cpp
~TCPConnectionPair()
```

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

---

<a id="dopeerconnect"></a>

### doPeerConnect

```cpp
bool doPeerConnect(const net::Address & peerAddr)
```

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

---

<a id="makedataconnection"></a>

### makeDataConnection

```cpp
bool makeDataConnection()
```

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

---

<a id="setpeersocket"></a>

### setPeerSocket

```cpp
void setPeerSocket(const net::TCPSocket::Ptr & socket)
```

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

---

<a id="setclientsocket"></a>

### setClientSocket

```cpp
void setClientSocket(const net::TCPSocket::Ptr & socket)
```

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

---

<a id="onpeerconnectsuccess"></a>

### onPeerConnectSuccess

```cpp
bool onPeerConnectSuccess(net::Socket & socket)
```

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

---

<a id="onpeerconnecterror"></a>

### onPeerConnectError

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

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

---

<a id="onclientdatareceived"></a>

### onClientDataReceived

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

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

---

<a id="onpeerdatareceived"></a>

### onPeerDataReceived

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

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

---

<a id="onconnectionclosed"></a>

### onConnectionClosed

```cpp
bool onConnectionClosed(net::Socket & socket)
```

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

---

<a id="starttimeout"></a>

### startTimeout

```cpp
void startTimeout()
```

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

---

<a id="requestdeletion"></a>

### requestDeletion

```cpp
void requestDeletion()
```

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

---

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

### expired

`const`

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

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

## Public Types

| Name | Description |
|------|-------------|
| [`Ptr`](#ptr-20)  |  |

---

<a id="ptr-20"></a>

### Ptr

```cpp
using Ptr = IntrusivePtr< TCPConnectionPair >
```

Type: [`IntrusivePtr`](https://auscaster.com/icey/docs/api-reference/icy-IntrusivePtr.md#intrusiveptr)< [`TCPConnectionPair`](#tcpconnectionpair) >

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

## Private Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`TCPConnectionPair`](#tcpconnectionpair-3)  | Deleted constructor. |
| [`TCPConnectionPair`](#tcpconnectionpair) & | [`operator=`](#operator-230)  | Deleted assignment operator. |
|  | [`TCPConnectionPair`](#tcpconnectionpair-4)  | Deleted constructor. |
| [`TCPConnectionPair`](#tcpconnectionpair) & | [`operator=`](#operator-231)  | Deleted assignment operator. |

---

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

### TCPConnectionPair

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

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

Deleted constructor.

---

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

### operator=

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

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

Deleted assignment operator.

---

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

### TCPConnectionPair

```cpp
TCPConnectionPair(TCPConnectionPair &&) = delete
```

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

Deleted constructor.

---

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

### operator=

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

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

Deleted assignment operator.
