Current section
Files
Jump to
Current section
Files
lib/ex_libsrtp/native.ex
defmodule ExLibSRTP.Native do
@moduledoc false
use Unifex.Loader
require ExLibSRTP
require Logger
alias ExLibSRTP.{MasterKey, Policy}
@spec marshal_ssrc(ExLibSRTP.Policy.ssrc_pattern_t()) :: {ssrc_type :: 1..3, ExLibSRTP.ssrc_t()}
def marshal_ssrc(:any_inbound), do: {2, 0}
def marshal_ssrc(:any_outbound), do: {3, 0}
def marshal_ssrc(ssrc) when ExLibSRTP.is_ssrc(ssrc), do: {1, ssrc}
@spec marshal_master_keys(Policy.key_spec_t()) :: {keys :: [binary()], mkis :: [binary()]}
def marshal_master_keys(key) when is_binary(key) do
{[key], []}
end
def marshal_master_keys(keys) when is_list(keys) do
keys
|> Enum.map(fn %MasterKey{key: key, mki: mki} -> {key, mki} end)
|> Enum.unzip()
end
@spec marshal_window_size(:default | pos_integer()) :: 0 | 64..32_768
def marshal_window_size(:default), do: 0
def marshal_window_size(window) when window < 64 do
Logger.warning("ExLibSRTP: Window size to small, setting to 64")
64
end
def marshal_window_size(window) when window > 32_768 do
Logger.warning("ExLibSRTP: Window size to large, setting to 32768")
32_768
end
def marshal_window_size(window), do: window
end