---
name: "Net::SIP::ReceiveChain"
section: "3pm"
platform: "linux"
package: "libnet-sip-perl"
version: "0.838-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Net::SIP::ReceiveChain"
---

# Net::SIP::ReceiveChain(3pm)

handle incoming packet by multiple receivers

## 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 `"receive"` method.

  `%ARGS` can have the following keys:

  - filter

    A callback which gets called during `"receive"` with 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 `"receive"` on 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.
