# ErrorCode

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

# ErrorCode

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

class ErrorCode
```

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

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

Implements the STUN ERROR-CODE attribute (RFC 5389 section 15.6). Encodes a 3-digit error code as a class (hundreds digit) and number (tens + units digits), plus an optional UTF-8 reason phrase.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`ErrorCode`](#errorcode-2) | `function` | Declared here |
| [`ErrorCode`](#errorcode-3) | `function` | Declared here |
| [`~ErrorCode`](#errorcode-4) | `function` | Declared here |
| [`clone`](#clone-13) | `function` | Declared here |
| [`setErrorCode`](#seterrorcode) | `function` | Declared here |
| [`setReason`](#setreason-1) | `function` | Declared here |
| [`errorCode`](#errorcode-5) | `function` | Declared here |
| [`errorClass`](#errorclass) | `function` | Declared here |
| [`errorNumber`](#errornumber-1) | `function` | Declared here |
| [`reason`](#reason-1) | `function` | Declared here |
| [`read`](#read-8) | `function` | Declared here |
| [`write`](#write-37) | `function` | Declared here |
| [`TypeID`](#typeid-1) | `variable` | Declared here |
| [`MinSize`](#minsize) | `variable` | Declared here |
| [`_class`](#_class) | `variable` | Declared here |
| [`_number`](#_number) | `variable` | Declared here |
| [`_reason`](#_reason-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 |
|--------|------|-------------|
|  | [`ErrorCode`](#errorcode-2)  |  |
|  | [`ErrorCode`](#errorcode-3)  | Copy constructor. |
|  | [`~ErrorCode`](#errorcode-4) `virtual` |  |
| std::unique_ptr< [`Attribute`](https://auscaster.com/icey/docs/api-reference/icy-stun-Attribute.md#attribute) > | [`clone`](#clone-13) `virtual` `override` | Returns a deep copy of this attribute. |
| `void` | [`setErrorCode`](#seterrorcode)  | Sets the error code, splitting it into class and number fields. |
| `void` | [`setReason`](#setreason-1)  | Sets the UTF-8 reason phrase and updates the attribute size. |
| `int` | [`errorCode`](#errorcode-5) `const` |  |
| `uint8_t` | [`errorClass`](#errorclass) `const` `inline` |  |
| `uint8_t` | [`errorNumber`](#errornumber-1) `const` `inline` |  |
| `const std::string &` | [`reason`](#reason-1) `const` `inline` |  |
| `void` | [`read`](#read-8) `virtual` `override` | Reads the body (not the type or size) for this type of attribute from the given buffer. |
| `void` | [`write`](#write-37) `virtual` `const` `override` | Writes the body (not the type or size) to the given buffer. |

---

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

### ErrorCode

```cpp
ErrorCode(uint16_t size = MinSize)
```

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `size` | `uint16_t` | Initial body length in bytes (must be >= MinSize). |

---

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

### ErrorCode

```cpp
ErrorCode(const ErrorCode & r)
```

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

Copy constructor.

---

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

### ~ErrorCode

`virtual`

```cpp
virtual ~ErrorCode()
```

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

---

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

### clone

`virtual` `override`

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

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

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="seterrorcode"></a>

### setErrorCode

```cpp
void setErrorCode(int code)
```

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

Sets the error code, splitting it into class and number fields.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `code` | `int` | 3-digit error code (e.g. 401, 438). |

---

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

### setReason

```cpp
void setReason(const std::string & reason)
```

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

Sets the UTF-8 reason phrase and updates the attribute size.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `reason` | `const std::string &` | Human-readable error description. |

---

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

### errorCode

`const`

```cpp
int errorCode() const
```

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

#### Returns
The full 3-digit error code (class * 100 + number).

---

<a id="errorclass"></a>

### errorClass

`const` `inline`

```cpp
inline uint8_t errorClass() const
```

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

#### Returns
The hundreds digit of the error code (e.g. 4 for a 4xx error).

---

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

### errorNumber

`const` `inline`

```cpp
inline uint8_t errorNumber() const
```

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

#### Returns
The tens+units portion of the error code (0-99).

---

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

### reason

`const` `inline`

```cpp
inline const std::string & reason() const
```

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

#### Returns
The reason phrase string (may be empty).

---

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

### read

`virtual` `override`

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

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

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-37"></a>

### write

`virtual` `const` `override`

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

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

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. |

## Public Static Attributes

| Return | Name | Description |
|--------|------|-------------|
| `constexpr uint16_t` | [`TypeID`](#typeid-1) `static` `constexpr` |  |
| `constexpr uint16_t` | [`MinSize`](#minsize) `static` `constexpr` | 4 bytes before the reason phrase. |

---

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

### TypeID

`static` `constexpr`

```cpp
constexpr uint16_t TypeID = 0x0009
```

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

---

<a id="minsize"></a>

### MinSize

`static` `constexpr`

```cpp
constexpr uint16_t MinSize = 4
```

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

4 bytes before the reason phrase.

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| `uint8_t` | [`_class`](#_class)  |  |
| `uint8_t` | [`_number`](#_number)  |  |
| `std::string` | [`_reason`](#_reason-1)  |  |

---

<a id="_class"></a>

### _class

```cpp
uint8_t _class
```

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

---

<a id="_number"></a>

### _number

```cpp
uint8_t _number
```

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

---

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

### _reason

```cpp
std::string _reason
```

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