# `ExUtcp.Transports.WebRTC.Signaling`
[🔗](https://github.com/universal-tool-calling-protocol/elixir-utcp/blob/main/lib/ex_utcp/transports/webrtc/signaling.ex#L1)

WebRTC signaling server client for exchanging SDP and ICE candidates.

Handles communication with the signaling server for:
- SDP offer/answer exchange
- ICE candidate exchange
- Peer discovery and connection establishment

# `t`

```elixir
@type t() :: %ExUtcp.Transports.WebRTC.Signaling{
  connection_state: atom(),
  parent_pid: pid(),
  peer_id: String.t() | nil,
  server_url: String.t(),
  websocket_pid: pid() | nil
}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `close`

```elixir
@spec close(pid()) :: :ok
```

Closes the signaling connection.

# `send_answer`

```elixir
@spec send_answer(pid(), map(), String.t()) :: :ok | {:error, term()}
```

Sends an SDP answer to the remote peer.

# `send_ice_candidate`

```elixir
@spec send_ice_candidate(pid(), map(), String.t()) :: :ok | {:error, term()}
```

Sends an ICE candidate to the remote peer.

# `send_offer`

```elixir
@spec send_offer(pid(), map(), String.t()) :: :ok | {:error, term()}
```

Sends an SDP offer to the remote peer.

# `start_link`

```elixir
@spec start_link(String.t(), pid()) :: {:ok, pid()} | {:error, term()}
```

Starts the signaling client.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
