Packages
Membrane Multimedia Framework (SDP protocol)
Current section
Files
Jump to
Current section
Files
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