# AddressAttribute

<a id="addressattribute"></a>

# AddressAttribute

```cpp
#include <icy/stun/attributes.h>

class AddressAttribute
```

[Defined in src/stun/include/icy/stun/attributes.h:164](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L164)

> **Inherits:** [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute)

Implements a STUN/TURN attribute that contains a socket address. Handles XOR encoding/decoding for address and port as required by RFC 5389 section 15.2.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`AddressAttribute`](#addressattribute-1) | `function` | Declared here |
| [`AddressAttribute`](#addressattribute-2) | `function` | Declared here |
| [`clone`](#clone-11) | `function` | Declared here |
| [`family`](#family-2) | `function` | Declared here |
| [`address`](#address-12) | `function` | Declared here |
| [`read`](#read-6) | `function` | Declared here |
| [`write`](#write-35) | `function` | Declared here |
| [`setAddress`](#setaddress) | `function` | Declared here |
| [`isXorType`](#isxortype) | `function` | Declared here |
| [`IPv4Size`](#ipv4size) | `variable` | Declared here |
| [`IPv6Size`](#ipv6size) | `variable` | Declared here |
| [`_address`](#_address-1) | `variable` | Declared here |
| [`~Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute-1) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`clone`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#clone-12) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`read`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#read-7) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`write`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#write-36) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#type-17) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#size-12) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`paddingBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddingbytes) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`paddedBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddedbytes) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`consumePadding`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#consumepadding) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`writePadding`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#writepadding) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`typeString`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typestring) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`TypeID`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typeid) | `variable` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`create`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#create-10) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`paddingBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddingbytes-1) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`paddedBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddedbytes-1) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`typeString`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typestring-1) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`_type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#_type-1) | `variable` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`_size`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#_size-3) | `variable` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute-2) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`setLength`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#setlength) | `function` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |
| [`Type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#type-18) | `enum` | Inherited from [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`~Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute-1) `virtual` `inline` |  |
| `function` | [`clone`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#clone-12) `virtual` | Returns a deep copy of this attribute. |
| `function` | [`read`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#read-7) `virtual` | Reads the body (not the type or size) for this type of attribute from the given buffer. |
| `function` | [`write`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#write-36) `virtual` `const` | Writes the body (not the type or size) to the given buffer. |
| `function` | [`type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#type-17) `const` |  |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#size-12) `const` |  |
| `function` | [`paddingBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddingbytes) `const` `inline` |  |
| `function` | [`paddedBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddedbytes) `const` `inline` |  |
| `function` | [`consumePadding`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#consumepadding) `const` | Advances the reader past any 4-byte alignment padding that follows this attribute's body. |
| `function` | [`writePadding`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#writepadding) `const` | Writes zero-fill padding bytes to align this attribute to a 4-byte boundary. |
| `function` | [`typeString`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typestring)  |  |
| `variable` | [`TypeID`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typeid) `static` `constexpr` |  |
| `function` | [`create`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#create-10) `static` | Creates an attribute of the given wire type and body size. Returns nullptr if the type is unknown or the size is invalid. |
| `function` | [`paddingBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddingbytes-1) `static` `inline` `constexpr` | Returns the 4-byte alignment padding required for a body of `size` bytes. |
| `function` | [`paddedBytes`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#paddedbytes-1) `static` `inline` `constexpr` | Returns the body length including 4-byte alignment padding. |
| `function` | [`typeString`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#typestring-1) `static` |  |
| `variable` | [`_type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#_type-1)  |  |
| `variable` | [`_size`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#_size-3)  |  |
| `function` | [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute-2)  |  |
| `function` | [`setLength`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#setlength)  | Updates the stored body length. |
| `enum` | [`Type`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#type-18)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`AddressAttribute`](#addressattribute-1)  |  |
|  | [`AddressAttribute`](#addressattribute-2)  | Copy constructor; duplicates the stored address. |
| std::unique_ptr< [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) > | [`clone`](#clone-11) `virtual` `override` | Returns a deep copy of this attribute. |
| [`stun::AddressFamily`](https://auscaster.com/icey/docs/api-reference/icy-stun.md#addressfamily) | [`family`](#family-2) `const` `inline` |  |
| [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) | [`address`](#address-12) `virtual` `const` |  |
| `void` | [`read`](#read-6) `virtual` `override` | Reads the body (not the type or size) for this type of attribute from the given buffer. |
| `void` | [`write`](#write-35) `virtual` `const` `override` | Writes the body (not the type or size) to the given buffer. |
| `void` | [`setAddress`](#setaddress) `virtual` `inline` | Sets the address to encode into this attribute. |
| `bool` | [`isXorType`](#isxortype) `const` `inline` |  |

---

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

### AddressAttribute

```cpp
AddressAttribute(uint16_t type, bool ipv4 = true)
```

[Defined in src/stun/include/icy/stun/attributes.h:169](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L169)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `uint16_t` | Wire type code (e.g. XorMappedAddress::TypeID). |
| `ipv4` | `bool` | When true, initialises the size for IPv4; otherwise IPv6. |

---

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

### AddressAttribute

```cpp
AddressAttribute(const AddressAttribute & r)
```

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

Copy constructor; duplicates the stored address.

---

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

### clone

`virtual` `override`

```cpp
virtual std::unique_ptr< Attribute > clone() override
```

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

Returns a deep copy of this attribute.

#### Reimplements

- [`Attribute::clone`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#clone-12)

---

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

### family

`const` `inline`

```cpp
inline stun::AddressFamily family() const
```

[Defined in src/stun/include/icy/stun/attributes.h:181](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L181)

#### Returns
The STUN address family (IPv4, IPv6, or Undefined) of the stored address.

---

<a id="address-12"></a>

### address

`virtual` `const`

```cpp
virtual net::Address address() const
```

[Defined in src/stun/include/icy/stun/attributes.h:193](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L193)

#### Returns
The decoded socket address stored in this attribute.

---

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

### read

`virtual` `override`

```cpp
virtual void read(BitReader & reader) override
```

[Defined in src/stun/include/icy/stun/attributes.h:196](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L196)

Reads the body (not the type or size) for this type of attribute from the given buffer.

#### Reimplements

- [`Attribute::read`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#read-7)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `reader` | [`BitReader`](https://auscaster.com/icey/docs/api-reference/icy-BitReader.md#bitreader) & | Source bit reader positioned at the attribute body. |

---

<a id="write-35"></a>

### write

`virtual` `const` `override`

```cpp
virtual void write(BitWriter & writer) const override
```

[Defined in src/stun/include/icy/stun/attributes.h:199](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L199)

Writes the body (not the type or size) to the given buffer.

#### Reimplements

- [`Attribute::write`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#write-36)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `writer` | [`BitWriter`](https://auscaster.com/icey/docs/api-reference/icy-BitWriter.md#bitwriter) & | Destination bit writer. |

---

<a id="setaddress"></a>

### setAddress

`virtual` `inline`

```cpp
virtual inline void setAddress(const net::Address & addr)
```

[Defined in src/stun/include/icy/stun/attributes.h:203](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L203)

Sets the address to encode into this attribute.

#### Parameters

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

---

<a id="isxortype"></a>

### isXorType

`const` `inline`

```cpp
inline bool isXorType() const
```

[Defined in src/stun/include/icy/stun/attributes.h:217](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L217)

#### Returns
true if this attribute type uses XOR encoding (RFC 5389).

## Public Static Attributes

| Return | Name | Description |
|--------|------|-------------|
| `constexpr uint16_t` | [`IPv4Size`](#ipv4size) `static` `constexpr` |  |
| `constexpr uint16_t` | [`IPv6Size`](#ipv6size) `static` `constexpr` |  |

---

<a id="ipv4size"></a>

### IPv4Size

`static` `constexpr`

```cpp
constexpr uint16_t IPv4Size = 8
```

[Defined in src/stun/include/icy/stun/attributes.h:177](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L177)

---

<a id="ipv6size"></a>

### IPv6Size

`static` `constexpr`

```cpp
constexpr uint16_t IPv6Size = 20
```

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

## Private Attributes

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

---

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

### _address

```cpp
net::Address _address
```

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

[Defined in src/stun/include/icy/stun/attributes.h:224](https://github.com/auscaster/icey/blob/main/src/stun/include/icy/stun/attributes.h#L224)
