Packages
sippet
0.6.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/transactions/supervisor.ex
defmodule Sippet.Transactions.Supervisor do
@moduledoc false
use Supervisor
import Sippet.Transactions.Registry
alias Sippet.Message, as: Message
alias Sippet.Message.RequestLine, as: RequestLine
alias Sippet.Transactions, as: Transactions
@type request :: Message.request
@doc false
def start_link() do
Supervisor.start_link(__MODULE__, [], name: __MODULE__)
end
@doc """
Starts a client transaction.
"""
@spec start_client(Transactions.Client.Key.t, request) ::
Supervisor.on_start_child
def start_client(%Transactions.Client.Key{} = key,
%Message{start_line: %RequestLine{}} = outgoing_request) do
module =
case key.method do
:invite -> Transactions.Client.Invite
_otherwise -> Transactions.Client.NonInvite
end
initial_data = Transactions.Client.State.new(outgoing_request, key)
Supervisor.start_child(__MODULE__, [module, initial_data,
[name: via_tuple(key)]])
end
@doc """
Starts a server transaction.
"""
@spec start_server(Transactions.Server.Key.t, request) ::
Supervisor.on_start_child
def start_server(%Transactions.Server.Key{} = key,
%Message{start_line: %RequestLine{}} = incoming_request) do
module =
case key.method do
:invite -> Transactions.Server.Invite
_otherwise -> Transactions.Server.NonInvite
end
initial_data = Transactions.Server.State.new(incoming_request, key)
Supervisor.start_child(__MODULE__, [module, initial_data,
[name: via_tuple(key)]])
end
@doc false
def init([]) do
children = [worker(GenStateMachine, [], restart: :transient)]
options = [strategy: :simple_one_for_one]
supervise(children, options)
end
end