# ConnectionStream

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

# ConnectionStream

```cpp
#include <icy/http/connection.h>

class ConnectionStream
```

[Defined in src/http/include/icy/http/connection.h:261](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L261)

> **Inherits:** [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter)

Packet stream wrapper for an HTTP connection.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`Outgoing`](#outgoing) | `variable` | Declared here |
| [`Incoming`](#incoming) | `variable` | Declared here |
| [`IncomingProgress`](#incomingprogress-1) | `variable` | Declared here |
| [`OutgoingProgress`](#outgoingprogress) | `variable` | Declared here |
| [`ConnectionStream`](#connectionstream-2) | `function` | Declared here |
| [`~ConnectionStream`](#connectionstream-3) | `function` | Declared here |
| [`send`](#send-14) | `function` | Declared here |
| [`connection`](#connection-5) | `function` | Declared here |
| [`_connection`](#_connection-1) | `variable` | Declared here |
| [`onSocketRecv`](#onsocketrecv-5) | `function` | Declared here |
| [`priority`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#priority-3) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`~SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-3) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`setSender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#setsender) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sender) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`addReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#addreceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`removeReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#removereceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`hasReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#hasreceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#receivers) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketconnect) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketerror) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketclose) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_sender) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_receivers) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_dirty`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dirty) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_dispatchDepth`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dispatchdepth) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`cleanupReceivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#cleanupreceivers) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |

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

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`priority`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#priority-3)  | The priority of this adapter for STL sort operations. |
| `function` | [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-1)  | Creates the [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter). |
| `function` | [`~SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-2) `virtual` `noexcept` | Destroys the [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter). |
| `function` | [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1) `virtual` | Sends the given data buffer to the connected peer. Returns the number of bytes sent or -1 on error. No exception will be thrown. For TCP sockets the given peer address must match the connected peer address. |
| `function` | [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-2) `virtual` |  |
| `function` | [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-2) `virtual` | Sends an owned payload buffer to the connected peer. |
| `function` | [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-3) `virtual` |  |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket) `virtual` | Sends the given packet to the connected peer. Returns the number of bytes sent or -1 on error. No exception will be thrown. For TCP sockets the given peer address must match the connected peer address. |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-1) `virtual` |  |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-2) `virtual` | Sends the given packet to the connected peer. This method provides delegate compatibility, and unlike other send methods throws an exception if the underlying socket is closed. |
| `function` | [`setSender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#setsender) `virtual` | Sets the pointer to the outgoing data adapter. Send methods proxy data to this adapter by default. |
| `function` | [`sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sender)  | Returns the output [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) pointer. |
| `function` | [`addReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#addreceiver) `virtual` | Sets the pointer to the incoming data adapter. Events proxy data to this adapter by default. |
| `function` | [`removeReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#removereceiver) `virtual` | Remove the given receiver. |
| `function` | [`hasReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#hasreceiver) `virtual` | Returns true if the given receiver is connected. |
| `function` | [`receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#receivers)  | Returns all currently registered input [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) pointers. Dead (removed) entries are excluded from the returned list. |
| `function` | [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketconnect) `virtual` | Called when the socket establishes a connection. Forwards the event to all registered receivers in priority order. Override to intercept before the application sees the event. |
| `function` | [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1) `virtual` | Called when data is received from the socket. Forwards the event to all registered receivers in priority order. |
| `function` | [`onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketerror) `virtual` | Called when the socket encounters an error. Forwards the event to all registered receivers in priority order. |
| `function` | [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketclose) `virtual` | Called when the socket is closed. Forwards the event to all registered receivers in priority order. |
| `variable` | [`_sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_sender)  |  |
| `variable` | [`_receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_receivers)  |  |
| `variable` | [`_dirty`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dirty)  |  |
| `variable` | [`_dispatchDepth`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dispatchdepth)  |  |
| `function` | [`cleanupReceivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#cleanupreceivers) `virtual` |  |

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`PacketStream`](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) | [`Outgoing`](#outgoing)  | The Outgoing stream is responsible for packetizing raw application data into the agreed upon HTTP format and sending it to the peer. |
| [`PacketStream`](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) | [`Incoming`](#incoming)  | The Incoming stream emits incoming HTTP packets for processing by the application. |
| [`ProgressSignal`](https://auscaster.com/icey/docs/api-reference/icy-http-ProgressSignal.md#progresssignal) | [`IncomingProgress`](#incomingprogress-1)  | Fired on download progress. |
| [`ProgressSignal`](https://auscaster.com/icey/docs/api-reference/icy-http-ProgressSignal.md#progresssignal) | [`OutgoingProgress`](#outgoingprogress)  | Fired on upload progress. |

---

<a id="outgoing"></a>

### Outgoing

```cpp
PacketStream Outgoing
```

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

[Defined in src/http/include/icy/http/connection.h:280](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L280)

The Outgoing stream is responsible for packetizing raw application data into the agreed upon HTTP format and sending it to the peer.

---

<a id="incoming"></a>

### Incoming

```cpp
PacketStream Incoming
```

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

[Defined in src/http/include/icy/http/connection.h:286](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L286)

The Incoming stream emits incoming HTTP packets for processing by the application.

This is useful for example when writing incoming data to a file.

---

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

### IncomingProgress

```cpp
ProgressSignal IncomingProgress
```

Type: [`ProgressSignal`](https://auscaster.com/icey/docs/api-reference/icy-http-ProgressSignal.md#progresssignal)

[Defined in src/http/include/icy/http/connection.h:288](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L288)

Fired on download progress.

---

<a id="outgoingprogress"></a>

### OutgoingProgress

```cpp
ProgressSignal OutgoingProgress
```

Type: [`ProgressSignal`](https://auscaster.com/icey/docs/api-reference/icy-http-ProgressSignal.md#progresssignal)

[Defined in src/http/include/icy/http/connection.h:289](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L289)

Fired on upload progress.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`ConnectionStream`](#connectionstream-2)  | Creates a [ConnectionStream](#connectionstream-1) wrapping the given HTTP connection. Wires the Outgoing stream emitter to the connection adapter and registers this stream to receive incoming data from the adapter. |
|  | [`~ConnectionStream`](#connectionstream-3) `virtual` |  |
| `ssize_t` | [`send`](#send-14) `virtual` `override` | Send data via the Outgoing stream. |
| [`Connection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#ptr-17) | [`connection`](#connection-5)  | Return a reference to the underlying connection. |

---

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

### ConnectionStream

```cpp
ConnectionStream(Connection::Ptr connection)
```

[Defined in src/http/include/icy/http/connection.h:268](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L268)

Creates a [ConnectionStream](#connectionstream-1) wrapping the given HTTP connection. Wires the Outgoing stream emitter to the connection adapter and registers this stream to receive incoming data from the adapter.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `connection` | [`Connection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#ptr-17) | The HTTP connection to wrap. |

---

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

### ~ConnectionStream

`virtual`

```cpp
virtual ~ConnectionStream()
```

[Defined in src/http/include/icy/http/connection.h:269](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L269)

---

<a id="send-14"></a>

### send

`virtual` `override`

```cpp
virtual ssize_t send(const char * data, size_t len, int flags = 0) override
```

[Defined in src/http/include/icy/http/connection.h:272](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L272)

Send data via the Outgoing stream.

#### Reimplements

- [`SocketAdapter::send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1)

---

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

### connection

```cpp
Connection::Ptr connection()
```

[Defined in src/http/include/icy/http/connection.h:275](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L275)

Return a reference to the underlying connection.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`Connection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#ptr-17) | [`_connection`](#_connection-1)  |  |

---

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

### _connection

```cpp
Connection::Ptr _connection
```

Type: [`Connection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-Connection.md#ptr-17)

[Defined in src/http/include/icy/http/connection.h:294](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L294)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `bool` | [`onSocketRecv`](#onsocketrecv-5) `virtual` `override` | Called when data is received from the socket. Forwards the event to all registered receivers in priority order. |

---

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

### onSocketRecv

`virtual` `override`

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

[Defined in src/http/include/icy/http/connection.h:292](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L292)

Called when data is received from the socket. Forwards the event to all registered receivers in priority order. 
#### Returns
true to stop propagation to subsequent receivers.

#### Reimplements

- [`SocketAdapter::onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The socket that received data. |
| `buffer` | const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) & | The received data buffer. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Address of the sender. |
