File Coverage

blib/lib/Net/SNMP/Transport/IPv4.pm
Criterion Covered Total %
statement 15 28 53.5
branch 0 6 0.0
condition 0 3 0.0
subroutine 8 14 57.1
pod n/a
total 23 51 45.1


line stmt bran cond sub pod time code
1             # -*- mode: perl -*-
2             # ============================================================================
3              
4             package Net::SNMP::Transport::IPv4;
5              
6             # $Id: IPv4.pm,v 1.1 2009/09/09 15:08:31 dtown Rel $
7              
8             # Base object for the IPv4 Transport Domains.
9              
10             # Copyright (c) 2008-2009 David M. Town
11             # All rights reserved.
12              
13             # This program is free software; you may redistribute it and/or modify it
14             # under the same terms as the Perl 5 programming language system itself.
15              
16             # ============================================================================
17              
18 2     2   15 use strict;
  2         5  
  2         66  
19              
20 2     2   12 use Net::SNMP::Transport;
  2         6  
  2         82  
21              
22 2         13 use IO::Socket qw(
23             INADDR_ANY INADDR_LOOPBACK inet_aton PF_INET sockaddr_in inet_ntoa
24 2     2   11 );
  2         5  
25              
26             ## Version of the Net::SNMP::Transport::IPv4 module
27              
28             our $VERSION = v1.0.0;
29              
30             # [private methods] ----------------------------------------------------------
31              
32             sub _socket_create
33             {
34 3     3   7 my ($this) = @_;
35              
36 3         16 return IO::Socket->new()->socket($this->_protocol_family(),
37             $this->_protocol_type(),
38             $this->_protocol());
39             }
40              
41             sub _protocol_family
42             {
43 3     3   296 return PF_INET;
44             }
45              
46             sub _addr_any
47             {
48 3     3   14 return INADDR_ANY;
49             }
50              
51             sub _addr_loopback
52             {
53 3     3   12 return INADDR_LOOPBACK;
54             }
55              
56             sub _hostname_resolve
57             {
58 0     0   0 my ($this, $host, $nh) = @_;
59              
60 0         0 $nh->{addr} = undef;
61              
62             # See if the the service/port was included in the address.
63              
64 0 0       0 my $serv = ($host =~ s/:([\w\(\)\/]+)$//) ? $1 : undef;
65              
66 0 0 0     0 if (defined($serv) && (!defined $this->_service_resolve($serv, $nh))) {
67 0         0 return $this->_error('Failed to resolve the %s service', $this->type());
68             }
69              
70             # Resolve the address.
71              
72 0 0       0 if (!defined ($nh->{addr} = inet_aton($_[1] = $host))) {
73 0         0 return $this->_error(
74             q{Unable to resolve the %s address "%s"}, $this->type(), $host
75             );
76             }
77              
78 0         0 return $nh->{addr};
79             }
80              
81             sub _name_pack
82             {
83 6     6   26 return sockaddr_in($_[1]->{port}, $_[1]->{addr});
84             }
85              
86             sub _address
87             {
88 0     0     return inet_ntoa($_[0]->_addr($_[1]));
89             }
90              
91             sub _addr
92             {
93 0     0     return (sockaddr_in($_[1]))[1];
94             }
95              
96             sub _port
97             {
98 0     0     return (sockaddr_in($_[1]))[0];
99             }
100              
101             sub _taddress
102             {
103 0     0     return sprintf '%s:%d', $_[0]->_address($_[1]), $_[0]->_port($_[1]);
104             }
105              
106             sub _taddr
107             {
108 0     0     return $_[0]->_addr($_[1]) . pack 'n', $_[0]->_port($_[1]);
109             }
110              
111             # ============================================================================
112             1; # [end Net::SNMP::Transport::IPv4]
113