Net-Frame-Layer-UDPLite
view release on metacpan or search on metacpan
lib/Net/Frame/Layer/UDPLite.pm view on Meta::CPAN
#
# $Id: UDPLite.pm 29 2015-01-23 06:28:43Z gomor $
#
package Net::Frame::Layer::UDPLite;
use strict; use warnings;
our $VERSION = '1.01';
use Net::Frame::Layer qw(:consts);
use Exporter;
our @ISA = qw(Net::Frame::Layer Exporter);
our %EXPORT_TAGS = (
consts => [qw(
)],
);
our @EXPORT_OK = (
@{$EXPORT_TAGS{consts}},
);
our @AS = qw(
src
dst
coverage
checksum
);
__PACKAGE__->cgBuildIndices;
__PACKAGE__->cgBuildAccessorsScalar(\@AS);
use Net::Frame::Layer qw(:subs);
sub new {
my $self = shift->SUPER::new(
src => getRandomHighPort(),
dst => getRandomHighPort(),
coverage => 0,
checksum => 0,
@_,
);
return $self;
}
sub getLength { 8 }
sub computeChecksums {
my $self = shift;
my ($h) = @_;
my $phpkt;
if ($h->{type} eq 'IPv4') {
$phpkt = $self->SUPER::pack('a4a4CCn',
inetAton($h->{src}), inetAton($h->{dst}), 0, 17, $self->getLength,
) or return;
}
elsif ($h->{type} eq 'IPv6') {
$phpkt = $self->SUPER::pack('a*a*NnCC',
inet6Aton($h->{src}),
inet6Aton($h->{dst}), $self->getLength, 0, 0, 17,
) or return
}
$phpkt .= $self->SUPER::pack('nnnn',
$self->src, $self->dst, $self->getLength, 0,
) or return;
if ($self->payload) {
$phpkt .= $self->SUPER::pack('a*', $self->payload)
or return;
}
$self->checksum(inetChecksum($phpkt));
return 1;
}
sub pack {
my $self = shift;
my $raw = $self->SUPER::pack("nnnn",
$self->src,
$self->dst,
$self->coverage,
$self->checksum,
) or return;
return $self->raw($raw);
}
sub unpack {
my $self = shift;
my ($src, $dst, $coverage, $checksum, $payload) =
$self->SUPER::unpack("nnnn a*", $self->raw)
or return;
$self->src($src);
$self->dst($dst);
$self->coverage($coverage);
$self->checksum($checksum);
$self->payload($payload);
return $self;
}
our $Next = {
};
sub encapsulate {
my $self = shift;
return $self->nextLayer;
}
sub print {
my $self = shift;
my $l = $self->layer;
my $buf = sprintf "$l:+src:%d dst:%d coverage:%d checksum:0x%04x",
$self->src,
( run in 3.022 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )