# FiveTuple

<a id="fivetuple"></a>

# FiveTuple

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

class FiveTuple
```

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

TURN allocation identity tuple: client remote address, server local address, and transport protocol.

The TURN 5-tuple consists of a local address, a remote address, and the transport protocol used by the client to communicate with the server.

```cpp
                                                          +---------+
                                                          |         |
                                                          | External|
                                                        / | Client  |
                                                      //  |         |
                                                     /    |         |
                                                   //     +---------+
                                                  /
                                                //
                +-+                            /
                | |                           /
                | |                         //
 +---------+    | |          +---------+   /              +---------+
 |         |    |N|          |         | //               |         |
 | TURN    |    | |          |         |/                 | External|
 | Client  |----|A|----------|   TURN  |------------------| Client  |
 |         |    | |^        ^|  Server |^                ^|         |
 |         |    |T||        ||         ||                ||         |
 +---------+    | ||        |+---------+|                |+---------+
    ^           | ||        |           |                |
    |           | ||        |           |                |
    |           +-+|        |           |                |
    |              |        |           |                |
    |
               Internal     Internal    External         External
Client         Remote       Local       Local            Remote
Performing     Transport    Transport   Transport        Transport
Allocations    Address      Address     Address          Address

                   |          |            |                |
                   +-----+----+            +--------+-------+
                         |                          |
                         |                          |

                       Internal                External
                       5-Tuple                 5-tuple
```

## Friends

| Name | Description |
|------|-------------|
| [`operator<<`](#operator-221) `inline` |  |

---

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

### operator<<

`inline`

```cpp
friend inline std::ostream & operator<<(std::ostream & stream, const FiveTuple & tuple)
```

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

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`FiveTuple`](#fivetuple-1)  | Constructs a default [FiveTuple](#fivetuple) with empty addresses and UDP transport. |
|  | [`FiveTuple`](#fivetuple-2)  | Constructs a [FiveTuple](#fivetuple) from explicit addresses and transport. |
|  | [`FiveTuple`](#fivetuple-3)  | Copy constructor. |
| const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | [`remote`](#remote-2) `const` `inline` |  |
| const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | [`local`](#local-2) `const` `inline` |  |
| const [`net::TransportType`](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype) & | [`transport`](#transport-4) `const` `inline` |  |
| `void` | [`remote`](#remote-3) `inline` | Sets the remote address. |
| `void` | [`local`](#local-3) `inline` | Sets the local address. |
| `void` | [`transport`](#transport-5) `inline` | Sets the transport protocol. |
| `bool` | [`operator==`](#operator-222) `const` | Equality comparison; all three components must match. |
| `bool` | [`operator<`](#operator-223) `const` | Less-than ordering based on remote then local port; used as std::map key. |
| `std::string` | [`toString`](#tostring-10) `const` |  |

---

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

### FiveTuple

```cpp
FiveTuple()
```

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

Constructs a default [FiveTuple](#fivetuple) with empty addresses and UDP transport.

---

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

### FiveTuple

```cpp
FiveTuple(const net::Address & remote, const net::Address & local, net::TransportType transport)
```

[Defined in src/turn/include/icy/turn/fivetuple.h:79](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L79)

Constructs a [FiveTuple](#fivetuple) from explicit addresses and transport.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `remote` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | [Client](https://auscaster.com/icey/docs/api-reference/icy-turn-Client.md#client-3)'s remote transport address (as seen by the server). |
| `local` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | [Server](https://auscaster.com/icey/docs/api-reference/icy-turn-Server.md#server-7)'s local transport address. |
| `transport` | [`net::TransportType`](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype) | Protocol in use ([net::UDP](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype) or [net::TCP](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype)). |

---

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

### FiveTuple

```cpp
FiveTuple(const FiveTuple & r)
```

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

Copy constructor.

---

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

### remote

`const` `inline`

```cpp
inline const net::Address & remote() const
```

[Defined in src/turn/include/icy/turn/fivetuple.h:86](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L86)

#### Returns
The remote (client-side) transport address.

---

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

### local

`const` `inline`

```cpp
inline const net::Address & local() const
```

[Defined in src/turn/include/icy/turn/fivetuple.h:89](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L89)

#### Returns
The local (server-side) transport address.

---

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

### transport

`const` `inline`

```cpp
inline const net::TransportType & transport() const
```

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

#### Returns
The transport protocol for this tuple.

---

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

### remote

`inline`

```cpp
inline void remote(const net::Address & remote)
```

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

Sets the remote address.

#### Parameters

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

---

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

### local

`inline`

```cpp
inline void local(const net::Address & local)
```

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

Sets the local address.

#### Parameters

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

---

<a id="transport-5"></a>

### transport

`inline`

```cpp
inline void transport(const net::TransportType & transport)
```

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

Sets the transport protocol.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `transport` | const [`net::TransportType`](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype) & | New transport type. |

---

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

### operator==

`const`

```cpp
bool operator==(const FiveTuple & r) const
```

[Defined in src/turn/include/icy/turn/fivetuple.h:110](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L110)

Equality comparison; all three components must match.

---

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

### operator<

`const`

```cpp
bool operator<(const FiveTuple & r) const
```

[Defined in src/turn/include/icy/turn/fivetuple.h:113](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L113)

Less-than ordering based on remote then local port; used as std::map key.

---

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

### toString

`const`

```cpp
std::string toString() const
```

[Defined in src/turn/include/icy/turn/fivetuple.h:116](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L116)

#### Returns
A human-readable string of the form "FiveTuple[remote:local:transport]".

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) | [`_remote`](#_remote-1)  |  |
| [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) | [`_local`](#_local-1)  |  |
| [`net::TransportType`](https://auscaster.com/icey/docs/api-reference/icy-net.md#transporttype) | [`_transport`](#_transport)  |  |

---

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

### _remote

```cpp
net::Address _remote
```

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

[Defined in src/turn/include/icy/turn/fivetuple.h:126](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L126)

---

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

### _local

```cpp
net::Address _local
```

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

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

---

<a id="_transport"></a>

### _transport

```cpp
net::TransportType _transport
```

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

[Defined in src/turn/include/icy/turn/fivetuple.h:128](https://github.com/auscaster/icey/blob/main/src/turn/include/icy/turn/fivetuple.h#L128)
