Current section
Files
Jump to
Current section
Files
lib/eslx.ex
defmodule ESLx do
@moduledoc """
`ESLx` a layer for Freeswitch Event Socket Protocol
"""
alias ESLx.ConnectionDetails
@doc """
executes api once and closes connection
"""
@spec api(ConnectionDetails.t(), cmd :: String.t(), timeout :: pos_integer()) ::
{:ok, String.t()} | :error
def api(connection_details, cmd, opts) do
connection_timeout = Keyword.get(opts, :connect_timeout, 1_000)
command_timeout = Keyword.get(opts, :command_timeout, 1_000)
{:ok, esl} =
LibESL.Inbound.start_link(
ConnectionDetails.host(connection_details),
ConnectionDetails.port(connection_details),
ConnectionDetails.password(connection_details),
connection_timeout
)
case LibESL.send_recv(esl, "api #{cmd}\n\n", command_timeout) do
{:ok, data} ->
LibESL.close(esl)
data
{:error, _error} ->
LibESL.close(esl)
:error
end
end
end