NAME
   AnyEvent::SIP - Fusing together AnyEvent and Net::SIP

VERSION
   version 0.002

SYNOPSIS
       # regular Net::SIP syntax
       use AnyEvent::SIP;
       use Net::SIP::Simple;

       my $stopvar;
       my $ua   = Net::SIP::Simple->new(...);
       my $call = $uac->invite(
           '[email protected]',
           cb_final => sub { $stopvar++ },
       );

       # wait for $stopvar, 5 second timeout
       $ua->loop( 5, \$stopvar );

       # AnyEvent-style
       use AnyEvent::SIP;
       use Net::SIP::Simple;

       my $cv   = AE::cv;
       my $ua   = Net::SIP::Simple->new(...);
       my $call = $uac->invite(
           '[email protected]',
           cb_final => sub { $cv->send },
       );

       $cv->recv;

       # compat-mode
       use AnyEvent::SIP 'compat';
       ...

DESCRIPTION
   This module allows you to use AnyEvent as the event loop (and thus any
   other supported event loop) for Net::SIP.

   Net::SIP::Simple allows you to define the event loop. You can either
   define it using Net::SIP::Dispatcher::AnyEvent manually or you can
   simply use AnyEvent::SIP which will automatically set it for you.

       # doing it automatically and globally
       use AnyEvent::SIP;
       use Net::SIP::Simple;

       my $cv = AE::cv;
       my $ua = Net::SIP::Simple->new(...);
       $ua->register( cb_final => sub { $cv->send } );
       $cv->recv;

       # defining it for a specific object
       use Net::SIP::Simple;
       use Net::SIP::Dispatcher::AnyEvent;

       my $cv = AE::cv;
       my $ua = Net::SIP::Simple->(
           ...
           loop => Net::SIP::Dispatcher::AnyEvent->new,
       );

       $ua->register;
       $cv->recv;

   You can also call Net::SIP's "loop" method in order to keep it as close
   as possible to the original syntax. This will internally use AnyEvent,
   whether you're using AnyEvent::SIP globally or
   Net::SIP::Dispatcher::AnyEvent locally.

       use AnyEvent::SIP;
       use Net::SIP::Simple;

       my $stopvar;
       my $ua = Net::SIP::Simple->new(...);
       $ua->register( cb_final => sub { $stopvar++ } );

       # call Net::SIP's event loop runner,
       # which calls AnyEvent's instead
       $ua->loop( 1, \$stopvar );

COMPATIBILITY
   Net::SIP requires dispatchers (event loops) to check their stopvars
   (condition variables) every single iteration of the loop. In my opinion,
   it's a wasteful and heavy operation. When it comes to loops like EV,
   they run a lot of cycles, and it's not very effecient and causes heavy
   load.

   To avoid that, the default mode for AnyEvent::SIP is to set up a timer
   to check the condition variables. Default interval is: 0.2 seconds.

   To configure this, you can set up the interval on import:

       use AnyEvent::SIP stopvar_interval => 0.1;
       ...

   If you want to keep AnyEvent::SIP completely compatible with the
   Net::SIP requirement (which fixes at least one bugfix test I haven't
   found out why yet), you can add the compat option on import;

       use AnyEvent::SIP 'compat';
       ...

   I can't promise not to change any of this.

AUTHOR
   Sawyer X <[email protected]>

COPYRIGHT AND LICENSE
   This software is copyright (c) 2013 by Sawyer X.

   This is free software; you can redistribute it and/or modify it under
   the same terms as the Perl 5 programming language system itself.