Provided by: libnet-sip-perl_0.687-1_all bug

NAME

       Net::SIP::Leg - Wrapper around Socket for sending and receiving SIP packets

SYNOPSIS

         my $leg = Net::SIP::Leg->new( addr => '192.168.0.2' );
         $leg->deliver( $packet, '192.168.0.5:5060' );

DESCRIPTION

       A Leg wraps the socket which is used to send and receive packets.  It provides ways to
       strip Via header from incoming packets, to add Via header to outgoing packets and to add
       Record-Route header while forwarding.

       It's usually not used directly, but from Net::SIP::Dispatcher.

CONSTRUCTOR

       new ( %ARGS )
           The constructor creates a new object based on the hash %ARGS.  The following keys are
           used from %ARGS:

           sock    The socket as IO::Socket::INET object. "addr", "port" and "proto" will be
                   determined from this object and not from %ARGS.

           addr    The local address of the socket. If this is given but no port it will extract
                   port from addr, if it's in the format "host:port".

           port    The port of the socket. Defaults to 5060.

           proto   The connection protocol, e.g. 'tcp' or 'udp'. Defaults to 'udp'.

           contact Optional contact information which will be added as Record-route header to
                   outgoing requests and used within Contact header for 200 Responses to INVITE.
                   If not given it will be created based on "addr", "port" and "proto".

           If no socket is given with "sock" it will be created based on "addr", "port" and
           "proto". If this fails the constructur will "die()".

           The constructor will creeate a uniq branch tag for this leg.

METHODS

       forward_incoming ( PACKET )
           Modifies the Net::SIP::Packet PACKET in-place for forwarding, e.g strips top Via
           header in responses, adds received parameter to top Via header in requests, handles
           the difference between forwarding of requests to strict or loose routes and inserts
           Record-Route header in requests.

       forward_outgoing ( PACKET, LEG_IN )
           Similar to forward_incoming, but will be called on the outgoing leg. LEG_IN is the
           Net::SIP::Leg, where the packet came in (and where forward_incoming was called). Will
           add Record-Route header and remove itself from Route.

       deliver ( PACKET, ADDR, [ CALLBACK ] )
           Delivers Net::SIP::Packet PACKET through the leg $self to ADDR, which is "ip:port".
           Usually this method will be call from within Net::SIP::Dispatcher.

           If the packet was received by the other end (which is only possible to say if a
           reliable protocol, e.g. 'tcp' was used) it will call CALLBACK if provided. See
           invoke_callback in Net::SIP::Util for the format of callbacks. If the packet could not
           be delivered CALLBACK will be invoked with the appropriate errno ($!).

           While delivering requests it adds a Via header.

       receive
           Reads a packet from the socket and returns the Net::SIP::Packet PACKET and the senders
           ADDR as "ip:port". If reading failed will return "()".

       check_via ( PACKET )
           Returns TRUE if the top Via header in the Net::SIP::Packet PACKET contains the
           branch-tag from $self, otherwise FALSE. Used to check if the response came in through
           the same leg the response was send.

       add_via ( PACKET )
           Adds itself to PACKET as Via header.

       can_deliver_to ( ADDR|%SPEC )
           Returns TRUE if the leg can deliver address specified by ADDR or %SPEC.  ADDR is a
           hostname which can be prefixed by the protocol ( e.g. "udp:host" ) and postfixed by
           the port ( "host:port", "tcp:host:port",... ).

           If the caller has 'proto','addr' and 'port' already as separate items it can call the
           method with %SPEC instead.

           Right now it has now way to check if the leg can deliver to a specific host because it
           has no access to the routing information of the underlying OS, so that only proto will
           be checked.

       fd  Returns socket of leg. In some special environments (like tests) there might be legs,
           which don't have a socket associated. In this case you need to call receive from
           Net::SIP::Dispatcher yourself, because it cannot be called automatically once it
           receives data on the socket.

       dump
           Returns string containing information about the leg.  Used for debugging.