Packages

Membrane Multimedia Framework (SDP protocol)

Current section

Files

Jump to
membrane_protocol_sdp lib sdp encryption.ex
Raw

lib/sdp/encryption.ex

defmodule Membrane.Protocol.SDP.Encryption do
@moduledoc """
This module represents Encryption field of SDP that
stores encryption key or acquisition method of such key.
Session key should be present IFF the transport medium
is secure.
For more details please see [RFC4566 Section 5.12](https://tools.ietf.org/html/rfc4566#section-5.12)
"""
@enforce_keys [:method]
defstruct @enforce_keys ++ [:key]
@type methods :: :prompt | :base64 | :clear | :prompt
@type t :: %__MODULE__{
method: methods(),
key: binary() | nil
}
@spec parse(binary()) :: {:ok, t()} | {:error, :unsupported_method}
def parse(definition) do
with {method, key} <- parse_definition(definition),
{:ok, method} <- method_to_atom(method) do
encryption = %__MODULE__{
method: method,
key: key
}
{:ok, encryption}
end
end
defp parse_definition(definition) do
case String.split(definition, ":", parts: 2) do
[method] -> {method, nil}
[method, key] -> {method, key}
end
end
defp method_to_atom(method)
defp method_to_atom("prompt"), do: {:ok, :prompt}
defp method_to_atom("clear"), do: {:ok, :clear}
defp method_to_atom("base64"), do: {:ok, :base64}
defp method_to_atom("uri"), do: {:ok, :uri}
defp method_to_atom(_), do: {:error, :unsupported_method}
end