Packages
sippet
0.4.3
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/queue.ex
defmodule Sippet.Transports.Queue do
@moduledoc """
The transport queue receives datagrams or messages from network transport
protocols, validates and routes them to the transaction module.
The queue contains a worker pool to improve processing performance.
"""
alias Sippet.Message, as: Message
alias Sippet.Transports.Pool, as: Pool
@type from :: {
protocol :: atom | binary,
host :: :inet.ip_address | binary,
dport :: :inet.port_number
}
@doc """
Dispatches an incoming datagram to be parsed by one of the pool workers.
The pool worker is responsible for moving the message up on the stack.
The `datagram` is a datagram packet just received from the transport that
needs to get parsed and validated before handled by transactions or the core.
The `from` parameter is a tuple containing the protocol, the host name and
the port of the socket that received the datagram.
"""
@spec incoming_datagram(String.t, from) :: :ok
def incoming_datagram(datagram, from) do
worker = Pool.check_out()
GenServer.cast(worker, {:incoming_datagram, datagram, from})
end
@doc """
Dispatches an incoming message to be validated by one of the pool workers.
The pool worker is responsible for moving the message up on the stack.
The `message` is a `Sippet.Message` struct normally built from a stream
socket, that still needs to be validated.
The `from` parameter is a tuple containing the protocol, the host name and
the port of the socket that received the message.
"""
@spec validate_message(message :: Message.t, from) :: :ok
def validate_message(%Message{} = message, from) do
worker = Pool.check_out()
GenServer.cast(worker, {:validate_message, message, from})
end
end