# SignallingInterface

<a id="signallinginterface"></a>

# SignallingInterface

```cpp
#include <icy/webrtc/signalling.h>

class SignallingInterface
```

[Defined in src/webrtc/include/icy/webrtc/signalling.h:42](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L42)

> **Subclassed by:** [`SympleServerSignaller`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleServerSignaller.md#sympleserversignaller), [`SympleSignaller`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleSignaller.md#symplesignaller), [`WebSocketSignaller`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebSocketSignaller.md#websocketsignaller)

Transport-agnostic signalling interface for WebRTC session setup.

Implementations handle the exchange of SDP offers/answers and ICE candidates between peers over whatever transport is available: Symple, plain WebSocket, REST, MQTT, carrier pigeon, etc.

[PeerSession](https://auscaster.com/icey/docs/api-reference/icy-wrtc-PeerSession.md#peersession) takes a reference to this interface. Implement it to plug in your own signalling backend.

[PeerSession](https://auscaster.com/icey/docs/api-reference/icy-wrtc-PeerSession.md#peersession) dispatches outbound SDP and ICE candidates on its event loop. Call its public control methods on that same loop when using a loop-affine signalling transport.

The three message categories:

* SDP: offer/answer exchange (the session description)
* Candidate: trickle ICE candidates
* Control: call lifecycle (init, accept, reject, hangup)

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)> | [`SdpReceived`](#sdpreceived)  | Fires when an SDP offer or answer arrives from a remote peer. Parameters: peerId, type ("offer"/"answer"), sdp. |
| [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)> | [`CandidateReceived`](#candidatereceived)  | Fires when an ICE candidate arrives from a remote peer. Parameters: peerId, candidate, mid. |
| [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)> | [`ControlReceived`](#controlreceived)  | Fires when a control message arrives from a remote peer. Parameters: peerId, type ("init"/"accept"/"reject"/"hangup"), reason. |

---

<a id="sdpreceived"></a>

### SdpReceived

```cpp
ThreadSignal< void(const std::string &, const std::string &, const std::string &)> SdpReceived
```

Type: [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)>

[Defined in src/webrtc/include/icy/webrtc/signalling.h:81](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L81)

Fires when an SDP offer or answer arrives from a remote peer. Parameters: peerId, type ("offer"/"answer"), sdp.

---

<a id="candidatereceived"></a>

### CandidateReceived

```cpp
ThreadSignal< void(const std::string &, const std::string &, const std::string &)> CandidateReceived
```

Type: [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)>

[Defined in src/webrtc/include/icy/webrtc/signalling.h:85](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L85)

Fires when an ICE candidate arrives from a remote peer. Parameters: peerId, candidate, mid.

---

<a id="controlreceived"></a>

### ControlReceived

```cpp
ThreadSignal< void(const std::string &, const std::string &, const std::string &)> ControlReceived
```

Type: [`ThreadSignal`](https://auscaster.com/icey/docs/api-reference/base.md#threadsignal)< void(const std::string &, const std::string &, const std::string &)>

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

Fires when a control message arrives from a remote peer. Parameters: peerId, type ("init"/"accept"/"reject"/"hangup"), reason.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`~SignallingInterface`](#signallinginterface-1) `virtual` | Defaulted destructor. |
| `void` | [`sendSdp`](#sendsdp) `virtual` | Send an SDP offer or answer to the remote peer. |
| `void` | [`sendCandidate`](#sendcandidate) `virtual` | Send an ICE candidate to the remote peer. |
| `void` | [`sendControl`](#sendcontrol) `virtual` | Send a control message to the remote peer. |

---

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

### ~SignallingInterface

`virtual`

```cpp
virtual ~SignallingInterface() = default
```

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

Defaulted destructor.

---

<a id="sendsdp"></a>

### sendSdp

`virtual`

```cpp
virtual void sendSdp(const std::string & peerId, const std::string & type, const std::string & sdp)
```

[Defined in src/webrtc/include/icy/webrtc/signalling.h:55](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L55)

Send an SDP offer or answer to the remote peer.

#### Reimplemented by

- [`SympleServerSignaller::sendSdp`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleServerSignaller.md#sendsdp-3)
- [`SympleSignaller::sendSdp`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleSignaller.md#sendsdp-2)
- [`WebSocketSignaller::sendSdp`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebSocketSignaller.md#sendsdp-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerId` | `const std::string &` | Remote peer identifier. |
| `type` | `const std::string &` | "offer" or "answer". |
| `sdp` | `const std::string &` | The SDP string. |

---

<a id="sendcandidate"></a>

### sendCandidate

`virtual`

```cpp
virtual void sendCandidate(const std::string & peerId, const std::string & candidate, const std::string & mid)
```

[Defined in src/webrtc/include/icy/webrtc/signalling.h:63](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L63)

Send an ICE candidate to the remote peer.

#### Reimplemented by

- [`SympleServerSignaller::sendCandidate`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleServerSignaller.md#sendcandidate-3)
- [`SympleSignaller::sendCandidate`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleSignaller.md#sendcandidate-2)
- [`WebSocketSignaller::sendCandidate`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebSocketSignaller.md#sendcandidate-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerId` | `const std::string &` | Remote peer identifier. |
| `candidate` | `const std::string &` | The candidate string (from RTCIceCandidate). |
| `mid` | `const std::string &` | The sdpMid value. |

---

<a id="sendcontrol"></a>

### sendControl

`virtual`

```cpp
virtual void sendControl(const std::string & peerId, const std::string & type, const std::string & reason = {})
```

[Defined in src/webrtc/include/icy/webrtc/signalling.h:71](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/signalling.h#L71)

Send a control message to the remote peer.

#### Reimplemented by

- [`SympleServerSignaller::sendControl`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleServerSignaller.md#sendcontrol-3)
- [`SympleSignaller::sendControl`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-SympleSignaller.md#sendcontrol-2)
- [`WebSocketSignaller::sendControl`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebSocketSignaller.md#sendcontrol-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `peerId` | `const std::string &` | Remote peer identifier. |
| `type` | `const std::string &` | Control type: "init", "accept", "reject", "hangup". |
| `reason` | `const std::string &` | Optional reason string (for reject/hangup). |
