=head1 NAME Net::SIP::NATHelper::Server - server for Net::SIP::NATHelper::Client =head1 DESCRIPTION This module is a wrapper around L<Net::SIP::NATHelper::Base> and will receive it's instructions from L<Net::SIP::NATHelper::Client> using RPC via sockets. =head1 CONSTRUCTOR =over 4 =item new ( [ HELPER ], @FDS ) Will create an object which listens on all file descriptors given in FDS for RPC from clients. If HELPER is given and a L<Net::SIP::NATHelper::Base> object or derived it will be used, otherwise the helper will be created. =back =head1 METHODS =over 4 =item do_command ( FD ) Called when FD is available for reading. Calls B<accept> on FD and reads the RPC packet from the resulting file descriptor, executes it and returns result back. Currently implemented commands are "allocate","activate" and "close" which will map to the local methods B<allocate_sockets>, B<activate_session> and B<close_session>. One might redefine or add commands by changing C<< $self->{commands} >>. The key of this hash reference is the command name and the value is the callback. Unknown commands will be ignored, e.g nothing returned. =item loop This will loop over all file descriptors it gets from B<callbacks> in L<Net::SIP::NATHelper::Base> and the file descriptors for the RPC sockets. When file descriptors gets available for reading it will execute the callbacks, e.g. forward the RTP data or call B<do_command>. In regular intervals it will call B<expire> from L<Net::SIP::NATHelper::Base> to expire the RTP sockets and sessions. =item allocate_sockets ( ... ) Calls B<allocate_sockets> of the local L<Net::SIP::NATHelper::Base> object. Takes and returns the same arguments. =item activate_session ( ... ) Calls B<activate_session> of the local L<Net::SIP::NATHelper::Base> object. Takes the same arguments and returns 1 if the session was newly activated, -1 if it was activated before and false if activation failed. Updates callbacks into the event loop. =item close_session ( ... ) Calls B<activate_session> of the local L<Net::SIP::NATHelper::Base> object. Takes the same arguments and returns the number of closed sessions. Updates callbacks into the event loop. =item expire ( ... ) Calls B<expire> of the local L<Net::SIP::NATHelper::Base> object. Takes the same arguments and returns the number of expired sessions. Updates callbacks into the event loop if necessary. =back =head1 BUGS The local event loop should be pluggable, so that other implementations could be used. Right now it's a hard coded loop using select.