Packages
sippet
0.1.5
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/transport/udp/sender.ex
defmodule Sippet.Transport.UDP.Sender do
alias Sippet.Message, as: Message
alias Sippet.Transport.UDP.Plug, as: Plug
alias Sippet.Transport.UDP.Pool, as: Pool
require Logger
def start_link(_), do: GenServer.start_link(__MODULE__, nil)
def init(_) do
Logger.info("#{inspect self()} udp worker ready")
{:ok, nil}
end
@doc false
def handle_cast({:send_message, message, host, port, transaction}, _) do
socket = Plug.get_socket()
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("#{inspect self()} udp worker error for " <>
"#{host}:#{port}: #{inspect reason}")
if transaction != nil do
Sippet.Transaction.receive_error(transaction, reason)
end
end
Pool.check_in(self())
{:noreply, nil}
end
def terminate(reason, _) do
Logger.info("#{inspect self()} stopped udp worker, " <>
"reason #{inspect reason}")
end
end