Packages
parrot_platform
0.0.1-alpha.2
Elixir libraries and OTP behaviours for building telecom applications with SIP protocol and media handling
Current section
Files
Jump to
Current section
Files
lib/parrot/sip/handler_adapter/handler_adapter.ex
defmodule Parrot.Sip.HandlerAdapter do
@moduledoc """
Adapter between the user-friendly Handler API and the internal SIP stack.
This module serves as the public API for the HandlerAdapter system, allowing
user code to interface with the SIP stack through a simplified API.
Under the hood, it uses gen_statem processes to manage the lifecycle of SIP
transactions and dialogs, with each instance handling a single primary request.
"""
@doc """
Creates a new HandlerAdapter instance.
This function creates a new Handler struct that wraps the user's handler module,
allowing it to interface with the SIP stack's internal handler system.
## Parameters
* `user_handler_module` - The module that implements the `Parrot.Handler` behaviour
* `user_handler_state` - The initial state to pass to the user handler's callbacks
## Returns
A new Handler struct that can be used with the SIP stack.
## Example
{:ok, handler} = MyApp.SipHandler.start_link([])
adapter = HandlerAdapter.new(MyApp.SipHandler, handler)
"""
def new(user_handler_module, user_handler_state) do
Parrot.Sip.HandlerAdapter.Core.new(user_handler_module, user_handler_state)
end
@doc """
Returns a child specification for starting this adapter under a supervisor.
This function conforms to the OTP child specification and is used when the
HandlerAdapter is added to a supervision tree.
## Parameters
* `args` - Arguments to pass to the `start_link/1` function
## Returns
A child specification map compatible with supervisors.
## Example
Supervisor.start_child(MySupervisor, HandlerAdapter.child_spec(args))
"""
def child_spec(args) do
Parrot.Sip.HandlerAdapter.Core.child_spec(args)
end
@doc """
Starts a new HandlerAdapter process.
Initializes a new gen_statem process that will handle a single SIP transaction,
interfacing between the user's handler module and the internal SIP stack.
## Parameters
* `args` - A tuple containing the user's handler module and state
## Returns
`{:ok, pid}` if the process was started successfully, or `{:error, reason}` if it failed.
This function is typically called by the HandlerAdapterSupervisor rather than directly.
"""
def start_link(args) do
Parrot.Sip.HandlerAdapter.Core.start_link(args)
end
end