NAME
Net::SIP::ReceiveChain - handle incoming packet by multiple receivers
SYNOPSIS
  # create proxy which works as a registrar too, but
  # all register requests should be authorized
  my $registrar = Net::SIP::Registrar->new...
  my $auth = Net::SIP::Authorize->new ....
  my $reg_chain = Net::SIP::ReceiveChain->new(
	[ $auth,$registrar ],
        methods => [ 'REGISTER' ],
  );
  my $proxy = Net::SIP::StatelessProxy->new...
  my $chain = Net::SIP::ReceiveChain->new(
	[ $registrar,$proxy ]
  );DESCRIPTION
This package is used to handle incoming packets by multiple receivers, e.g. make sure that requests for Net::SIP::Registrar will be authorized by Net::SIP::Authorize.
Objects in the chain might be Net::SIP::Registrar, Net::SIP::StatelessProxy, Net::SIP::Authorize, Net::SIP::ReceiveChain itself and every other object which handles receive like described below.
CONSTRUCTOR
- new ( OBJECTS, %ARGS )
- 
This creates a new registar object, OBJECTS is a reference to an array of objects implementing the receivemethod.%ARGS can have the following keys: - filter
- 
A callback which gets called during receivewith all arguments of the method. If it returns TRUE the packet will be handled by the chain, otherwise not.
- methods
- 
If filter is not given but methods is it will set filter to a callback which accepts only the methods specified in the array reference given to methods. 
 
METHODS
- receive ( PACKET,LEG,FROM )
- 
PACKET is the incoming packet, LEG is the Net::SIP::Leg where the packet arrived and FROM is the "ip:port"of the sender. Responses will be send back to the sender through the same leg.Called from the managing Net::SIP::Dispatcher object if a new packet arrives. Returns TRUE if the packet was fully handled by one of the objects in the chain, else FALSE: - If a filter was given checks the packet against the filter and returns FALSE if the filter does return FALSE. 
- Otherwise it will call - receiveon all objects in the chain until one of these returns TRUE. In this case it will return TRUE.
- If no object in the chain handled the packet it will return FALSE.