/usr/share/perl5/Net/SIP/Leg.pod is in libnet-sip-perl 0.812-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | =head1 NAME
Net::SIP::Leg - Wrapper around Socket for sending and receiving SIP packets
=head1 SYNOPSIS
my $leg = Net::SIP::Leg->new( addr => '192.168.0.2' );
$leg->deliver( $packet, '192.168.0.5:5060' );
=head1 DESCRIPTION
A B<Leg> wraps the socket which is used to send and receive packets.
It provides ways to strip B<Via> header from incoming packets, to
add B<Via> header to outgoing packets and to add B<Record-Route> header
while forwarding.
It's usually not used directly, but from L<Net::SIP::Dispatcher>.
=head1 CONSTRUCTOR
=over 4
=item new ( %ARGS )
The constructor creates a new object based on the hash %ARGS.
The following keys are used from %ARGS:
=over 8
=item sock
The socket as IO::Socket object. C<addr>, C<port>, C<family> and C<proto>
will be determined from this object and not from %ARGS.
This will be used to create the B<SocketPool> object.
=item socketpool
The socketpool as L<Net::SIP::SocketPool> compatible object. This argument can
not be used together with C<sock>. It will instead determine the master socket
by calling B<master> on the given B<SocketPool> object.
=item addr
The local IP address of the socket. If this is given but no port it
will extract port from addr, if it's in the format C<< host:port >>.
=item host
The hostname matching C<addr>. This is used to create default contact
information and the Via header. If not given defaults to the IP address.
Use of hostname instead of IP address is relevant for TLS where the
name is needed in validation of the peers certificate.
=item port
The port of the socket. Defaults to 5060.
=item family
The family of the socket. Will be determined from C<addr> if omitted.
=item proto
The connection protocol, e.g. 'udp', 'tcp' or 'tls'. Defaults to 'udp'.
=item dst
The optional fixed target of the leg as hash with keys C<host>, C<addr>, C<port>
and C<family>.
=item contact
Optional contact information which will be added as B<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 C<addr>, C<port>
and C<proto>.
=item tls
Optional arguments to be used in creating a TLS connection, as expected by
L<IO::Socket::SSL>.
These are used for both incoming and outgoing TLS connection. Typically this
involves C<SSL_cert_file>, C<SSL_key_file> and C<SSL_ca_file> or similar.
=back
If no socket is given with C<sock> it will be created based on C<addr>, C<port>
and C<proto>. If this fails the constructur will C<< die() >>.
The constructor will create a uniq branch tag for this leg.
=back
=head1 METHODS
=over 4
=item forward_incoming ( PACKET )
Modifies the L<Net::SIP::Packet> PACKET in-place for forwarding, e.g
strips top B<Via> header in responses, adds B<received> parameter to
top B<Via> header in requests, handles the difference between forwarding
of requests to strict or loose routes and inserts B<Record-Route>
header in requests.
=item forward_outgoing ( PACKET, LEG_IN )
Similar to B<forward_incoming>, but will be called on the outgoing
leg. LEG_IN is the L<Net::SIP::Leg>, where the packet came in (and where
B<forward_incoming> was called). Will add B<Record-Route> header and
remove itself from B<Route>.
=item deliver ( PACKET, ADDR, [ CALLBACK ] )
Delivers L<Net::SIP::Packet> PACKET through the leg C<$self> to ADDR.
ADDR is a hash with the keys C<host>, C<addr>, C<port> and C<family>.
Usually this method will be call from within L<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 B<invoke_callback> in L<Net::SIP::Util> for
the format of callbacks. If the packet could not be delivered CALLBACK
will be invoked with the appropriate errno (C<$!>).
While delivering requests it adds a B<Via> header.
=item receive(PACKET, FROM)
This is called from the dispatcher if the the L<Net::SIP::Packet> B<PACKET> was
received from B<FROM>. FROM is given as hash with keys C<addr>, C<port>,
C<family> and C<proto>.
This function might process the packet further or block it.
It will return C<< (PACKET, FROM) >> in the normal case or C<()> if blocked.
=item check_via ( PACKET )
Returns TRUE if the top B<Via> header in the L<Net::SIP::Packet> PACKET contains
the B<branch>-tag from C<$self>, otherwise FALSE. Used to check if the response
came in through the same leg the response was send.
=item add_via ( PACKET )
Adds itself to PACKET as B<Via> header.
=item can_deliver_to ( ADDR|%SPEC )
Returns TRUE if the leg can deliver address specified by ADDR or %SPEC.
ADDR is a full or partial SIP URI.
If the caller has 'proto','addr','port' and 'family' 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.
=item match(%SPEC)
This checks if the given B<SPEC> matches the leg. This is used from inside the
B<get_legs> in L<Net::SIP::Dispatcher> to get all legs matching specific
criteria. The B<SPEC> can contain the keys C<addr>, C<port> and C<proto>
which match the arguments given during construction of the leg or are obtained
from the legs socket.
Additionally C<sub> can be used to specify a function which gets called with
the leg object and must return true on match only.
The method returns true if there was a full match and false otherwise.
=item socketpool
This returns the L<Net::SIP::SocketPool> object associated with the leg.
=item laddr(LEVEL)
This will return the local address of the socket, either as address only
(B<LEVEL> is 0) or as C<ip:port> (higher levels).
=item dump
Returns string containing information about the leg.
Used for debugging.
=back
|