Packages
sippet
0.2.8
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
An Elixir Session Initiation Protocol (SIP) stack.
Current section
Files
Jump to
Current section
Files
lib/sippet/transports/udp/sender.ex
defmodule Sippet.Transports.UDP.Sender do
alias Sippet.Message, as: Message
alias Sippet.Transports.UDP.Plug, as: Plug
alias Sippet.Transports.UDP.Pool, as: Pool
alias Sippet.Transactions, as: Transactions
require Logger
def start_link(_), do: GenServer.start_link(__MODULE__, nil)
def init(_) do
socket = Plug.get_socket()
Logger.debug(fn -> "#{inspect self()} udp sender ready" end)
{:ok, socket}
end
@doc false
def handle_cast({:send_message, message, host, port, key}, socket) do
result =
case Socket.Address.for(host, :inet) do
{:ok, [address|_]} ->
iodata = Message.to_iodata(message)
case Socket.Datagram.send(socket, iodata, {address, port}) do
:ok -> :ok
other -> other
end
other ->
other
end
case result do
:ok ->
:ok
{:error, reason} ->
Logger.warn(fn -> "#{inspect self()} udp sender error for " <>
"#{host}:#{port}: #{inspect reason}" end)
if key != nil do
Transactions.receive_error(key, reason)
end
end
Pool.check_in(self())
{:noreply, socket}
end
def terminate(reason, _socket) do
Logger.warn(fn -> "#{inspect self()} stopped udp sender, " <>
"reason #{inspect reason}" end)
end
end