# http

<a id="http"></a>

# http

HTTP request/response types, parsers, and server/client helpers.

## Classes

| Name | Description |
|------|-------------|
| [`Authenticator`](https://auscaster.com/icey/docs/api-reference/icy-http-Authenticator.md#authenticator) | Maintains HTTP Basic or Digest authentication state for outbound requests. |
| [`BasicAuthenticator`](https://auscaster.com/icey/docs/api-reference/icy-http-BasicAuthenticator.md#basicauthenticator) | Encodes and decodes HTTP Basic authentication credentials. |
| [`ChunkedAdapter`](https://auscaster.com/icey/docs/api-reference/icy-http-ChunkedAdapter.md#chunkedadapter) | HTTP chunked transfer encoding adapter for streaming responses. |
| [`Client`](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client) | HTTP client for creating and managing outgoing connections. |
| [`ClientConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) | HTTP client connection for managing request/response lifecycle. |
| [`Connection`](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#connection-1) | Base HTTP connection managing socket I/O and message lifecycle |
| [`ConnectionAdapter`](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionAdapter.md#connectionadapter-1) | Default HTTP socket adapter for reading and writing HTTP messages |
| [`ConnectionPool`](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionPool.md#connectionpool) | LIFO connection pool for reusing [ServerConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#serverconnection-1) objects. Avoids per-request heap allocation by resetting and reusing connections instead of destroying and recreating them. |
| [`ConnectionStream`](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionStream.md#connectionstream-1) | Packet stream wrapper for an HTTP connection. |
| [`Cookie`](https://auscaster.com/icey/docs/api-reference/icy-http-Cookie.md#cookie) | HTTP cookie value plus its response/header attributes. |
| [`FilePart`](https://auscaster.com/icey/docs/api-reference/icy-http-FilePart.md#filepart) | Form part backed by a file on disk. |
| [`FormPart`](https://auscaster.com/icey/docs/api-reference/icy-http-FormPart.md#formpart) | An implementation of [FormPart](https://auscaster.com/icey/docs/api-reference/icy-http-FormPart.md#formpart). |
| [`FormWriter`](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) | [FormWriter](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter) is an HTTP client connection adapter for writing HTML forms. |
| [`Message`](https://auscaster.com/icey/docs/api-reference/icy-http-Message.md#message-1) | The base class for [Request](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) and [Response](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3). |
| [`MultipartAdapter`](https://auscaster.com/icey/docs/api-reference/icy-http-MultipartAdapter.md#multipartadapter) | HTTP multipart encoding adapter for multipart/x-mixed-replace streaming. |
| [`Parser`](https://auscaster.com/icey/docs/api-reference/icy-http-Parser.md#parser-1) | HTTP request/response parser using the llhttp library. |
| [`ParserObserver`](https://auscaster.com/icey/docs/api-reference/icy-http-ParserObserver.md#parserobserver) | Abstract observer interface for HTTP parser events. |
| [`ProgressSignal`](https://auscaster.com/icey/docs/api-reference/icy-http-ProgressSignal.md#progresssignal) | HTTP progress signal for upload and download progress notifications. |
| [`Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) | HTTP request message with method, URI, headers, and optional body. |
| [`Response`](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) | HTTP response message with status, reason phrase, headers, and body metadata. |
| [`Server`](https://auscaster.com/icey/docs/api-reference/icy-http-Server.md#server) | HTTP server implementation. |
| [`ServerConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#serverconnection-1) | HTTP server connection. |
| [`ServerConnectionFactory`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnectionFactory.md#serverconnectionfactory) | Factory for creating per-socket [`ServerConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#serverconnection-1) and per-request [`ServerResponder`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerResponder.md#serverresponder) objects. |
| [`ServerResponder`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerResponder.md#serverresponder) | Base responder interface for handling one HTTP request on a server connection. Derived classes typically override [`onRequest()`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerResponder.md#onrequest) and optionally the streaming hooks. |
| [`StringPart`](https://auscaster.com/icey/docs/api-reference/icy-http-StringPart.md#stringpart-1) | Form part backed by an in-memory string payload. |
| [`URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) | An RFC 3986 based [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) parser. Constructors and assignment operators will throw a SyntaxException if the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) is invalid. |
| [`DateCache`](https://auscaster.com/icey/docs/api-reference/icy-http-DateCache.md#datecache) | Caches the formatted Date header, updated once per second. Avoids per-request time formatting and string allocation. |
| [`Method`](https://auscaster.com/icey/docs/api-reference/icy-http-Method.md#method-3) | HTTP request methods. |
| [`StaticFileInfo`](https://auscaster.com/icey/docs/api-reference/icy-http-StaticFileInfo.md#staticfileinfo) | Metadata needed to serve a static file with HTTP validators. |

## Enumerations

| Name | Description |
|------|-------------|
| [`StatusCode`](#statuscode)  | HTTP [Response](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) Status Codes. |
| [`ServerConnectionState`](#serverconnectionstate)  | HTTP server-side lifecycle phases used by the keep-alive state machine. |
| [`ServerConnectionMode`](#serverconnectionmode)  | Transport mode for server connections before and after protocol upgrade. |

---

<a id="statuscode"></a>

### StatusCode

```cpp
enum StatusCode
```

[Defined in src/http/include/icy/http/response.h:25](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/response.h#L25)

HTTP [Response](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) Status Codes.

| Value | Description |
|-------|-------------|
| `Continue` |  |
| `SwitchingProtocols` |  |
| `OK` |  |
| `Created` |  |
| `Accepted` |  |
| `NonAuthoritative` |  |
| `NoContent` |  |
| `ResetContent` |  |
| `PartialContent` |  |
| `MultipleChoices` |  |
| `MovedPermanently` |  |
| `Found` |  |
| `SeeOther` |  |
| `NotModified` |  |
| `UseProxy` |  |
| `TemporaryRedirect` |  |
| `BadRequest` |  |
| `Unauthorized` |  |
| `PaymentRequired` |  |
| `Forbidden` |  |
| `NotFound` |  |
| `MethodNotAllowed` |  |
| `NotAcceptable` |  |
| `ProxyAuthRequired` |  |
| `RequestTimeout` |  |
| `Conflict` |  |
| `Gone` |  |
| `LengthRequired` |  |
| `PreconditionFailed` |  |
| `EntityTooLarge` |  |
| `UriTooLong` |  |
| `UnsupportedMediaType` |  |
| `RangeNotSatisfiable` |  |
| `ExpectationFailed` |  |
| `UnprocessableEntity` |  |
| `UpgradeRequired` |  |
| `InternalServerError` |  |
| `NotImplemented` |  |
| `BadGateway` |  |
| `Unavailable` |  |
| `GatewayTimeout` |  |
| `VersionNotSupported` |  |

---

<a id="serverconnectionstate"></a>

### ServerConnectionState

```cpp
enum ServerConnectionState
```

[Defined in src/http/include/icy/http/server.h:39](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L39)

HTTP server-side lifecycle phases used by the keep-alive state machine.

| Value | Description |
|-------|-------------|
| `ReceivingHeaders` | Parsing request headers. |
| `ReceivingBody` | Receiving request body bytes. |
| `DispatchingOrSending` | Dispatching the responder or sending a normal response. |
| `Streaming` | Sending a long-lived streaming response. |
| `Upgraded` | Upgraded to a non-HTTP protocol such as WebSocket. |
| `Closing` | Close has been requested and teardown is in progress. |
| `Closed` | [Connection](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#connection-1) has fully closed. |

---

<a id="serverconnectionmode"></a>

### ServerConnectionMode

```cpp
enum ServerConnectionMode
```

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

Transport mode for server connections before and after protocol upgrade.

| Value | Description |
|-------|-------------|
| `Http` | Standard HTTP request/response mode. |
| `Upgraded` | Upgraded transport mode owned by another protocol adapter. |
## Typedefs

| Return | Name | Description |
|--------|------|-------------|
| std::vector< [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) > | [`ClientConnectionPtrVec`](#clientconnectionptrvec)  | List of owned client connections tracked by an HTTP client. |

---

<a id="clientconnectionptrvec"></a>

### ClientConnectionPtrVec

```cpp
using ClientConnectionPtrVec = std::vector< ClientConnection::Ptr >
```

Type: std::vector< [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) >

[Defined in src/http/include/icy/http/client.h:145](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L145)

List of owned client connections tracked by an HTTP client.

## Functions

| Return | Name | Description |
|--------|------|-------------|
| `bool` | [`isBasicCredentials`](#isbasiccredentials)  | Returns true if the given Authorization header value uses HTTP Basic authentication. |
| `bool` | [`isDigestCredentials`](#isdigestcredentials)  | Returns true if the given Authorization header value uses HTTP Digest authentication. |
| `bool` | [`hasBasicCredentials`](#hasbasiccredentials)  | Returns true if the request contains a Basic Authorization header. |
| `bool` | [`hasDigestCredentials`](#hasdigestcredentials)  | Returns true if the request contains a Digest Authorization header. |
| `bool` | [`hasProxyBasicCredentials`](#hasproxybasiccredentials)  | Returns true if the request contains a Basic Proxy-Authorization header. |
| `bool` | [`hasProxyDigestCredentials`](#hasproxydigestcredentials)  | Returns true if the request contains a Digest Proxy-Authorization header. |
| `void` | [`extractCredentials`](#extractcredentials)  | Splits a "user:password" user-info string into separate username and password strings. If no ':' is present, the entire string is treated as the username and password is empty. |
| `void` | [`extractCredentials`](#extractcredentials-1)  | Extracts username and password from the user-info component of a [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). Does nothing if the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) has no user-info part. |
| [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) | [`createConnectionT`](#createconnectiont) `inline` | Creates a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) (or subtype) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) without registering it with a [Client](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client) instance. The socket and adapter are chosen based on the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme: |
| [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) | [`createConnection`](#createconnection) `inline` | Creates a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) and optionally registers it with a [Client](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client). Equivalent to calling [Client::createConnection()](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#createconnection-1) when `client` is non-null. |
| `const char *` | [`getStatusCodeReason`](#getstatuscodereason)  | Returns the standard reason phrase for the given HTTP status code (e.g. "OK" for [StatusCode::OK](#statuscode), "Not Found" for [StatusCode::NotFound](#statuscode)). |
| `const char *` | [`getStatusCodeString`](#getstatuscodestring)  | Returns a combined "NNN Reason" string for the given HTTP status code (e.g. "200 OK"). |
| `bool` | [`statStaticFile`](#statstaticfile)  | Read static-file metadata from disk. |
| `bool` | [`prepareStaticFileResponse`](#preparestaticfileresponse)  | Apply static-file headers and request conditionals to the response. |
| `std::string` | [`parseURI`](#parseuri)  | Extracts the URI (path and query) from a raw HTTP request line. |
| `bool` | [`matchURL`](#matchurl)  | Tests whether a URI matches a glob-style expression. |
| `std::string` | [`parseCookieItem`](#parsecookieitem)  | Extracts a named attribute from a [Cookie](https://auscaster.com/icey/docs/api-reference/icy-http-Cookie.md#cookie) header value. |
| `bool` | [`splitURIParameters`](#splituriparameters)  | Parses [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) query parameters from a URI into key-value pairs. Handles percent-decoding of names and values. |
| `void` | [`splitParameters`](#splitparameters)  | Splits a header-style parameter string into a primary value and named attributes. Attributes are separated by ';'. Enclosing quotes are stripped from values. |
| `void` | [`splitParameters`](#splitparameters-1)  | Splits a substring (defined by iterators) into named attributes. Attributes are separated by ';'. Enclosing quotes are stripped from values. |

---

<a id="isbasiccredentials"></a>

### isBasicCredentials

```cpp
bool isBasicCredentials(std::string_view header)
```

[Defined in src/http/include/icy/http/authenticator.h:162](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L162)

Returns true if the given Authorization header value uses HTTP Basic authentication.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `header` | `std::string_view` | Value of the Authorization or WWW-Authenticate header. |

---

<a id="isdigestcredentials"></a>

### isDigestCredentials

```cpp
bool isDigestCredentials(std::string_view header)
```

[Defined in src/http/include/icy/http/authenticator.h:166](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L166)

Returns true if the given Authorization header value uses HTTP Digest authentication.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `header` | `std::string_view` | Value of the Authorization or WWW-Authenticate header. |

---

<a id="hasbasiccredentials"></a>

### hasBasicCredentials

```cpp
bool hasBasicCredentials(const http::Request & request)
```

[Defined in src/http/include/icy/http/authenticator.h:170](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L170)

Returns true if the request contains a Basic Authorization header.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | const [`http::Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | HTTP request to inspect. |

---

<a id="hasdigestcredentials"></a>

### hasDigestCredentials

```cpp
bool hasDigestCredentials(const http::Request & request)
```

[Defined in src/http/include/icy/http/authenticator.h:174](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L174)

Returns true if the request contains a Digest Authorization header.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | const [`http::Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | HTTP request to inspect. |

---

<a id="hasproxybasiccredentials"></a>

### hasProxyBasicCredentials

```cpp
bool hasProxyBasicCredentials(const http::Request & request)
```

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

Returns true if the request contains a Basic Proxy-Authorization header.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | const [`http::Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | HTTP request to inspect. |

---

<a id="hasproxydigestcredentials"></a>

### hasProxyDigestCredentials

```cpp
bool hasProxyDigestCredentials(const http::Request & request)
```

[Defined in src/http/include/icy/http/authenticator.h:182](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L182)

Returns true if the request contains a Digest Proxy-Authorization header.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | const [`http::Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | HTTP request to inspect. |

---

<a id="extractcredentials"></a>

### extractCredentials

```cpp
void extractCredentials(std::string_view userInfo, std::string & username, std::string & password)
```

[Defined in src/http/include/icy/http/authenticator.h:189](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L189)

Splits a "user:password" user-info string into separate username and password strings. If no ':' is present, the entire string is treated as the username and password is empty.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `userInfo` | `std::string_view` | Input string in the form "user:password". |
| `username` | `std::string &` | Receives the extracted username. |
| `password` | `std::string &` | Receives the extracted password. |

---

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

### extractCredentials

```cpp
void extractCredentials(const http::URL & uri, std::string & username, std::string & password)
```

[Defined in src/http/include/icy/http/authenticator.h:197](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/authenticator.h#L197)

Extracts username and password from the user-info component of a [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). Does nothing if the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) has no user-info part.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `uri` | const [`http::URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) & | [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) to extract credentials from. |
| `username` | `std::string &` | Receives the extracted username. |
| `password` | `std::string &` | Receives the extracted password. |

---

<a id="createconnectiont"></a>

### createConnectionT

`inline`

```cpp
template<class ConnectionT> inline ClientConnection::Ptr createConnectionT(const URL & url, uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/http/include/icy/http/client.h:166](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L166)

Creates a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) (or subtype) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) without registering it with a [Client](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client) instance. The socket and adapter are chosen based on the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme:

* "http" -> TCPSocket
* "https" -> SSLSocket
* "ws" -> TCPSocket + WebSocket adapter
* "wss" -> SSLSocket + WebSocket adapter

#### Returns
Shared pointer to the created connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `url` | const [`URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) & | Target [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). Must have a recognised scheme. |
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to use. Defaults to the default libuv loop. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::runtime_error` | if the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme is not recognised. |

---

<a id="createconnection"></a>

### createConnection

`inline`

```cpp
inline ClientConnection::Ptr createConnection(const URL & url, http::Client * client = nullptr, uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/http/include/icy/http/client.h:265](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L265)

Creates a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) and optionally registers it with a [Client](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client). Equivalent to calling [Client::createConnection()](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#createconnection-1) when `client` is non-null. 
#### Returns
Shared pointer to the created connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `url` | const [`URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) & | Target [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The scheme determines the socket and adapter type. |
| `client` | [`http::Client`](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client) * | Optional [Client](https://auscaster.com/icey/docs/api-reference/icy-http-Client.md#client) instance to register the connection with. |
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to use. Defaults to the default libuv loop. |

---

<a id="getstatuscodereason"></a>

### getStatusCodeReason

```cpp
const char * getStatusCodeReason(StatusCode status)
```

[Defined in src/http/include/icy/http/response.h:161](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/response.h#L161)

Returns the standard reason phrase for the given HTTP status code (e.g. "OK" for [StatusCode::OK](#statuscode), "Not Found" for [StatusCode::NotFound](#statuscode)). 
#### Returns
Null-terminated reason phrase string.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `status` | [`StatusCode`](#statuscode) | HTTP status code. |

---

<a id="getstatuscodestring"></a>

### getStatusCodeString

```cpp
const char * getStatusCodeString(StatusCode status)
```

[Defined in src/http/include/icy/http/response.h:167](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/response.h#L167)

Returns a combined "NNN Reason" string for the given HTTP status code (e.g. "200 OK"). 
#### Returns
Null-terminated status code string.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `status` | [`StatusCode`](#statuscode) | HTTP status code. |

---

<a id="statstaticfile"></a>

### statStaticFile

```cpp
bool statStaticFile(std::string_view path, StaticFileInfo & info)
```

[Defined in src/http/include/icy/http/server.h:273](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L273)

Read static-file metadata from disk. 
#### Returns
True if the path exists and is a regular file.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `path` | `std::string_view` | File path on disk. |
| `info` | [`StaticFileInfo`](https://auscaster.com/icey/docs/api-reference/icy-http-StaticFileInfo.md#staticfileinfo) & | Receives the file size, weak ETag, and HTTP-normalized last-modified time. |

---

<a id="preparestaticfileresponse"></a>

### prepareStaticFileResponse

```cpp
bool prepareStaticFileResponse(const Request & request, Response & response, const StaticFileInfo & info)
```

[Defined in src/http/include/icy/http/server.h:284](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L284)

Apply static-file headers and request conditionals to the response.

Sets `Content-Length`, `ETag`, and `Last-Modified` from `info`, then evaluates `If-None-Match` and `If-Modified-Since` for the current request.

#### Returns
True if the response should not send a body (`304` or `412`).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | const [`Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | Incoming HTTP request. |
| `response` | [`Response`](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) & | Outgoing HTTP response to update. |
| `info` | const [`StaticFileInfo`](https://auscaster.com/icey/docs/api-reference/icy-http-StaticFileInfo.md#staticfileinfo) & | Precomputed static-file metadata. |

---

<a id="parseuri"></a>

### parseURI

```cpp
std::string parseURI(std::string_view request)
```

[Defined in src/http/include/icy/http/util.h:26](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/util.h#L26)

Extracts the URI (path and query) from a raw HTTP request line. 
#### Returns
The URI portion (e.g. "/path?q=1").

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `request` | `std::string_view` | Raw HTTP request line (e.g. "GET /path?q=1 HTTP/1.1"). |

---

<a id="matchurl"></a>

### matchURL

```cpp
bool matchURL(std::string_view uri, std::string_view expression)
```

[Defined in src/http/include/icy/http/util.h:32](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/util.h#L32)

Tests whether a URI matches a glob-style expression. 
#### Returns
true if the URI matches the expression.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `uri` | `std::string_view` | The URI to test. |
| `expression` | `std::string_view` | Pattern to match against. '*' matches any sequence of characters. |

---

<a id="parsecookieitem"></a>

### parseCookieItem

```cpp
std::string parseCookieItem(std::string_view cookie, std::string_view item)
```

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

Extracts a named attribute from a [Cookie](https://auscaster.com/icey/docs/api-reference/icy-http-Cookie.md#cookie) header value. 
#### Returns
The value of the named attribute, or an empty string if not found.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `cookie` | `std::string_view` | Full [Cookie](https://auscaster.com/icey/docs/api-reference/icy-http-Cookie.md#cookie) header value (e.g. "name=value; Path=/; HttpOnly"). |
| `item` | `std::string_view` | Attribute name to find (e.g. "Path"). |

---

<a id="splituriparameters"></a>

### splitURIParameters

```cpp
bool splitURIParameters(std::string_view uri, NVCollection & out)
```

[Defined in src/http/include/icy/http/util.h:45](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/util.h#L45)

Parses [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) query parameters from a URI into key-value pairs. Handles percent-decoding of names and values. 
#### Returns
true if at least one parameter was parsed; false otherwise.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `uri` | `std::string_view` | URI string optionally containing a '?' query component. |
| `out` | [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection) & | Collection to populate with parsed parameters. |

---

<a id="splitparameters"></a>

### splitParameters

```cpp
void splitParameters(const std::string & s, std::string & value, NVCollection & parameters)
```

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

Splits a header-style parameter string into a primary value and named attributes. Attributes are separated by ';'. Enclosing quotes are stripped from values.

Example input: "multipart/mixed; boundary=\"boundary-01234567\"" Output value: "multipart/mixed", parameters: { "boundary" -> "boundary-01234567" }

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `s` | `const std::string &` | Input string to split. |
| `value` | `std::string &` | Receives the primary value before the first ';'. |
| `parameters` | [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection) & | Receives the parsed attribute key-value pairs. |

---

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

### splitParameters

```cpp
void splitParameters(const std::string::const_iterator & begin, const std::string::const_iterator & end, NVCollection & parameters)
```

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

Splits a substring (defined by iterators) into named attributes. Attributes are separated by ';'. Enclosing quotes are stripped from values.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `begin` | `const std::string::const_iterator &` | Iterator to the start of the string to parse. |
| `end` | `const std::string::const_iterator &` | Iterator past the end of the string to parse. |
| `parameters` | [`NVCollection`](https://auscaster.com/icey/docs/api-reference/icy-NVCollection.md#nvcollection) & | Receives the parsed attribute key-value pairs. |
