=head1 NAME
Net::SIP::Registrar - Endpoint for registering SIP clients
=head1 SYNOPSIS
my $reg = Net::SIP::Registry->new(
dispatcher => $dispatcher,
min_expires => 10,
max_expires => 60,
domains => [ 'example.com','example.org' ],
);
=head1 DESCRIPTION
This package implements a simple SIP registrar. In the current implementation
registry information are only kept in memory, e.g. they are not preserved over
restarts.
=head1 CONSTRUCTOR
=over 4
=item new ( %ARGS )
This creates a new registar object, %ARGS can have the following keys:
=over 8
=item dispatcher
L<Net::SIP::Dispatcher> object manging the registar. Mandatory.
=item max_expires
Maximum expires time accepted. If the client requests a larger
expires value it will be capped at B<max_expires>
Defaults to 300.
=item min_expires
Minimum expires value. If the client requests a smaller value
the registrar will return a response of C<< 423 Interval too brief >>.
Defaults to 30.
=item domains or domain
Either string or reference to list of strings containing the names
of the domains the registrar is responsable for. If not given the
registrar accepts everything.
=back
=back
=head1 METHODS
=over 4
=item receive ( PACKET,LEG,FROM )
PACKET is the incoming packet,
LEG is the L<Net::SIP::Leg> where the packet arrived and FROM
is the C<< "ip:port" >> of the sender. Responses will be send
back to the sender through the same leg.
Called from the managing L<Net::SIP::Dispatcher> object if a new
packet arrives. Will return C<()> and ignore the packet if it's
not a REGISTER request or if it is not responsable for the domain
given in the C<From> heeader of the REGISTER request.
If it is responsable for the packet it will create a response
and return the code of the response. Responses are either
C<< 423 Interval too brief >> if the request expires time
is too small, or C<< 200 Ok >> if the expires time is 0 (e.g. the
client should be unregistered) or greater or equal B<min_expires>.
In case of a successful response it wil also update the internal
registry information.
=item query ( ADDR )
Search for ADDR (which has format C<< proto:user@domain >>)
in the registry. Returns @List of all sip or sips contacts
for ADDR.
=item expire
Removes all expired entries from the internal registry.
Called whenever the registry information gets updated from
sub B<receive>.
=back