# `ExSDP`
[🔗](https://github.com/membraneframework/ex_sdp/blob/v1.2.0/lib/ex_sdp.ex#L1)

This module represents the SDP Session.

Its fields directly correspond to those defined in
[RFC4566](https://tools.ietf.org/html/rfc4566#section-5)

# `t`

```elixir
@type t() :: %ExSDP{
  attributes: [ExSDP.Attribute.t()],
  bandwidth: [ExSDP.Bandwidth.t()],
  connection_data: ExSDP.ConnectionData.t() | nil,
  email: binary() | nil,
  encryption: ExSDP.Encryption.t() | nil,
  media: [ExSDP.Media.t()],
  origin: ExSDP.Origin.t(),
  phone_number: binary() | nil,
  session_information: binary() | nil,
  session_name: binary(),
  time_repeats: [ExSDP.RepeatTimes.t()],
  time_zones_adjustments: ExSDP.Timezone.t() | nil,
  timing: ExSDP.Timing.t() | nil,
  uri: binary() | nil,
  version: non_neg_integer()
}
```

# `add_attribute`

```elixir
@spec add_attribute(t() | ExSDP.Media.t(), ExSDP.Attribute.t()) ::
  t() | ExSDP.Media.t()
```

# `add_attributes`

```elixir
@spec add_attributes(t() | ExSDP.Media.t(), [ExSDP.Attribute.t()]) ::
  t() | ExSDP.Media.t()
```

# `add_media`

```elixir
@spec add_media(t(), ExSDP.Media.t() | [ExSDP.Media.t()]) :: t() | ExSDP.Media.t()
```

# `delete_attribute`

```elixir
@spec delete_attribute(t() | ExSDP.Media.t(), ExSDP.Attribute.key()) ::
  t() | ExSDP.Media.t()
```

# `delete_attributes`

```elixir
@spec delete_attributes(t() | ExSDP.Media.t(), [ExSDP.Attribute.key()]) ::
  t() | ExSDP.Media.t()
```

# `get_attribute`

```elixir
@spec get_attribute(t() | ExSDP.Media.t(), ExSDP.Attribute.key()) ::
  ExSDP.Attribute.t() | nil
```

# `get_attributes`

```elixir
@spec get_attributes(t() | ExSDP.Media.t(), ExSDP.Attribute.key()) :: [
  ExSDP.Attribute.t()
]
```

# `new`

```elixir
@spec new(
  version: non_neg_integer(),
  username: binary(),
  session_id: integer(),
  session_version: integer(),
  address: ExSDP.Address.t(),
  session_name: binary()
) :: t()
```

Returns new sdp struct.

By default:
* `version` is `0`
* `username`, `session_id`, `session_version` and `address` - refer to `Origin.new/1`
* `session_name` is `-`

# `parse`

# `parse!`

---

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